diff --git a/slides/fonctions_dordre_superieur.md b/slides/fonctions_dordre_superieur.md
index 7539576b37668c1b4c47313943fe0de78ea333f3..d4545d20ec81afdbf4766e56d7250f5d1dbae54a 100644
--- a/slides/fonctions_dordre_superieur.md
+++ b/slides/fonctions_dordre_superieur.md
@@ -218,22 +218,60 @@ vec3 add(vec3 lhs, vec3 rhs){
         
 # Le map
 
-```c
-typedef double (*operator)(double);
-double *map(operator op, double *tab, size_t size) {
-    double *res = malloc(sizeof(*res) * size);
-    for (int i = 0; i < size; ++i) {
-        res[i] = op(tab[i]);
+* Exemple d'application
+
+    ```c
+    typedef double (*operator)(double);
+    double *map(operator op, double *tab, size_t size) {
+        double *res = malloc(sizeof(*res) * size);
+        for (int i = 0; i < size; ++i) {
+            res[i] = op(tab[i]);
+        }
+        return res;
     }
-    return res;
-}
-double add_one(double val) {
-    return val + 1;
-}
-double sqr(double lhs){
-    return apply_operator(add_dbl, lhs, rhs);
-}
-double tab[] = {1.0, 2.0, 3.0};
-double *square = map(sqr, tab, 3);
-double *and_one = map(add_one, square, 3);
-```
\ No newline at end of file
+    double add_one(double val) {
+        return val + 1;
+    }
+    double sqr(double val){
+        return val * val;
+    }
+    double tab[] = {1.0, 2.0, 3.0};
+    double *square = map(sqr, tab, 3);
+    double *and_one = map(add_one, square, 3);
+    ```
+
+# Le map
+
+* Permettrait le chaînage.
+
+    ```C
+    double *sqr_and_one = map(add_one, map(sqr, tab, 3), 3);
+    ```
+. . .
+
+* Problème?
+
+. . .
+
+* Allocation dynamique... fuite mémoire.
+
+. . .
+
+* Solution?
+
+. . .
+
+    ```c
+    typedef double (*operator)(double);
+    double *map(operator op, double *tab, size_t size) {
+        double *res = malloc(sizeof(*res) * size);
+        for (int i = 0; i < size; ++i) {
+            res[i] = op(tab[i]);
+        }
+        free(tab);
+        return res;
+    }
+    ```
+
+* Problème potentiel?
+* **Attention au double free!**