diff --git a/slides/allocation_dynamique.md b/slides/allocation_dynamique.md
index f9b7438e2c7f4a5d2fa427610ce974ad549487af..4c732143395a168a1d3eb9a07da9212c1fea20df 100644
--- a/slides/allocation_dynamique.md
+++ b/slides/allocation_dynamique.md
@@ -3,7 +3,7 @@ title: "Allocation dynamique de mémoire"
 date: "2022-11-22"
 ---
 
-# Allocation dynamique de mémoire (1/9)
+# Allocation dynamique de mémoire (1/8)
 
 - La fonction `malloc`{.C} permet d'allouer dynamiquement (pendant l'exécution du programme) une zone de mémoire contiguë.
 
@@ -15,7 +15,7 @@ date: "2022-11-22"
 - Retourne un pointeur sur la zone mémoire ou `NULL`{.C} en cas d'échec: **toujours vérifier** que la valeur retournée est `!= NULL`{.C}.
 - Le *type* du retour est `void *`{.C} (un pointeur de type quelconque).
 
-# Allocation dynamique de mémoire (2/9)
+# Allocation dynamique de mémoire (2/8)
 
 - On peut allouer et initialiser une `fraction_t`{.C}:
 
@@ -30,7 +30,7 @@ date: "2022-11-22"
 
 ![La représentation mémoire de `fraction_t` et fuites.](figs/pointer_struct_ok.svg){width=100%}
 
-# Allocation dynamique de mémoire (3/9)
+# Allocation dynamique de mémoire (3/8)
 
 - La fonction `free()`{.C} permet de libérer une zone préalablement allouée avec `malloc()`{.C}.
 
@@ -44,7 +44,7 @@ date: "2022-11-22"
 - Pour éviter les mauvaises surprises mettre `ptr`{.C} à `NULL`{.C} après
   libération.
 
-# Allocation dynamique de mémoire (4/9)
+# Allocation dynamique de mémoire (4/8)
 
 ## Tableaux dynamiques
 
@@ -69,7 +69,7 @@ date: "2022-11-22"
     p[0] == *p; // le pointeur est le premier élément
     ```
 
-# Allocation dynamique de mémoire (5/9)
+# Allocation dynamique de mémoire (5/8)
 
 ## Arithmétique de pointeurs
 
@@ -83,25 +83,7 @@ $$
 \mathcal{O}(1).
 $$
 
-# Allocation dynamique de mémoire (6/9)
-
-## Questions
-
-```C
-int *p = malloc(50 * sizeof(int));
-for (int i = 0; i < 50; ++i)
-    p[i] = 0;   // ça fait quoi?
-sizeof(p);      // ça vaut quoi?
-sizeof(*p);     // ça vaut quoi?
-p[10]     = -1; // ça fait quoi?
-(p + 20)  = -1; // ça fait quoi?
-*(p + 20) = -1; // ça fait quoi?
-p[-1]     = -1; // ça fait quoi?    
-p[50]     = -1; // ça fait quoi?    
-7[p]      = 12; // ça fait quoi?
-```
-
-# Allocation dynamique de mémoire (7/9)
+# Allocation dynamique de mémoire (7/8)
 
 ## Pointeur de pointeur
 
@@ -114,13 +96,13 @@ p[50]     = -1; // ça fait quoi?
     ```
 - Chaque `*`{.C} ou `&`{.C} rajoute une indirection.
 
-# Allocation dynamique de mémoire (8/9)
+# Allocation dynamique de mémoire (7/8)
 
 ## Pointeur de pointeur
 
 ![Les références de pointeurs.](figs/double_pointeur.svg){height=100%}
 
-# Allocation dynamique de mémoire (9/9)
+# Allocation dynamique de mémoire (8/8)
 
 - Avec `malloc()`, on peut allouer dynamiquement des tableaux de pointeurs:
 
@@ -156,3 +138,84 @@ gcc -o main main.c -g -fsanitize=address -fsanitize=leak
 
 **Attention:** Il faut également faire l'édition des liens avec les sanitizers.
 
+# Questions
+
+## Que fait le code suivant?
+
+```C
+int *p = malloc(50 * sizeof(int));
+p[10] = 1;
+```
+
+. . .
+
+* On alloue de la place pour 50 entiers,
+* On initialise le 11e élément du tableau à 1,
+* Les autres éléments sont non-initialisés.
+
+# Questions
+
+## Que fait le code suivant?
+
+```C
+float *p = malloc(50);
+p[20] = 1.3;
+```
+
+. . .
+
+* On déclare un pointeur de floats de taille 50 octets,
+* Mais il ne peut contenir que `50 / 4` floats (un float est composé de 32bits),
+* On dépasse la capacité de la mémoire alloué: comportement indéfini.
+
+# Questions
+
+## Que fait le code suivant?
+
+```C
+float *p = malloc(50);
+p[20] = 1.3;
+```
+
+. . .
+
+* On déclare un pointeur de floats de taille 50 octets,
+* Mais il ne peut contenir que `50 / 4` floats (un float est composé de 32bits),
+* On dépasse la capacité de la mémoire alloué: comportement indéfini.
+
+# Questions
+
+* Soit le code suivant
+
+```C
+int *p = malloc(50 * sizeof(int));
+for (int i = 0; i < 50; ++i) {
+    p[i] = 0;
+}
+```
+
+* Le réécrire en utilisant uniquement l'arithmétique de pointeurs.
+
+. . .
+
+```C
+int *p = malloc(50 * sizeof(int));
+for (int i = 0; i < 50; ++i) {
+    *(p+i) = 0;
+}
+```
+
+# Questions
+
+## Que valent les expressions suivantes?
+
+```C
+in32_t *p = malloc(50 * sizeof(int32_t));
+sizeof(p);
+sizeof(*p);
+(p + 20);
+*(p + 20);
+p[-1];
+p[50];
+7[p];
+```