diff --git a/base_2.md b/base_2.md
index 668f211126129ea1a4fbf1702219e0db323468f2..203e396c117c06c45db3b1b6de2c63ba27bffbdd 100644
--- a/base_2.md
+++ b/base_2.md
@@ -46,9 +46,9 @@
 
     ```C
     char *c; // déclaration pointeur de char
-    *c = 'a'; // assignation de 'a' dans la valeur pointée par c
+    *c = 'a'; // assign. 'a' à valeur pointée par c
     c = 1000; // on modifie l'adresse pointée par c
-    char d = *c; // on essaie de lire la valeur pointée par c... argl!
+    char d = *c; // on lit la valeur pointée par c. UB!
     ```
 
 - `NULL`{.C} (ou `0`{.C}) est la seule adresse **toujours** invalide.
@@ -101,9 +101,11 @@
 - Syntaxe:
 
     ```C
-    type identificateur(paramètres) { // variables optionnelles
+    type identificateur(paramètres) { 
+        // variables optionnelles
         instructions;
-        return expression; // type donne le type d'expression
+        // type expression == type
+        return expression; 
     }
     ```
 
@@ -170,8 +172,8 @@
 - Les arguments d'une fonction ne peuvent **jamais** être modifiés.
 
     ```C
-    void set_to_two(int a) { // a est une nouvelle variable
-        // la valeur de a une copie de celle passée en argument
+    void set_to_two(int a) { // a: nouvelle variable
+        // valeur de a est une copie de x
         // lorsque la fonction est appelée, ici -1
 
         a = 2; // la valeur de a est fixée à 2
@@ -379,18 +381,62 @@ do {
 
     ```C
     void foo(int tab[]) { // sans taille...
-        for (int i = 0; i < ?; ++i) { // on sait pas
+        for (int i = 0; i < ?; ++i) {
+            // on sait pas quoi mettre pour ?
             printf("tab[%d] = %d\n", i, tab[i]);
         }
     }
-    // avec taille, [n] pas obligatoire
-    void bar(int n, int tab[n]) { // n doit venir avant tab ici
+    // n doit venir avant tab, [n] opionel
+    void bar(int n, int tab[n]) {
         for (int i = 0; i < n; ++i) {
             printf("tab[%d] = %d\n", i, tab[i]);
         }
     }
     ```
 
+# Les tableaux (5/N)
+
+## Quels sont les bugs dans ce code?
+
+```C
+#include <stdio.h>
+
+int main(void) {
+	char i;
+	char a1[] = { 100,200,300,400,500 };
+	char a2[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
+	a2[10] = 42;
+
+	for (i = 0; i < 5; i++) {
+		printf("a1[%d] = %d\n", i, a1[i]);
+	}
+
+	return 0;
+}
+```
+
+# Les tableaux (6/N)
+
+## Quels sont les bugs dans ce code?
+
+```C
+#include <stdio.h>
+
+int main(void) {
+	char i;
+    // 200, .., 500 char overflow
+	char a1[] = { 100,200,300,400,500 };
+	char a2[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
+	a2[10] = 42; // [10] out of bounds
+
+	for (i = 0; i < 5; i++) {
+		printf("a1[%d] = %d\n", i, a1[i]);
+	}
+
+	return 0;
+}
+```
+
 <!-- TODO quiz:  -->
 
 <!-- que retourne sizeof(tab[]) -->