From adf393af99b80e09f8d5d8fcf9ea0d4d8cbe7b9e Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Mon, 21 Nov 2022 17:39:47 +0100 Subject: [PATCH] ajout fontions --- slides/allocation_dynamique.md | 54 +++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/slides/allocation_dynamique.md b/slides/allocation_dynamique.md index 4c73214..ccf0102 100644 --- a/slides/allocation_dynamique.md +++ b/slides/allocation_dynamique.md @@ -116,6 +116,58 @@ $$ - Ceci est une matrice (un tableau de tableau). +# Tableau dynamique en argument d'une fonction + +## Implémenter la fonction ci-dessous + +```C +int32_t *p = malloc(50 * sizeof(*p)); +initialize_to(p, 50, -1); // initialise un tableau à -1 +free(p); // ne pas oublier +``` + +. . . + +```C +void initialize_to(int32_t *p, size_t size, int32_t val) { + for (size_t i = 0; i < size; ++i) { + p[i] = val; + } +} +``` + + +# Tableau dynamique retourné d'une fonction + +## Implémenter la fonction ci-dessous + +```C +// alloue un tableau de taille 50 et l'initilise à -1 +int32_t *p = initialize_to(p, 50, -1); +free(p); // ne pas oublier +``` + +. . . + +```C +uint32_t initialize_to(int32_t *p, size_t size, int32_t val) { + int32_t *p = malloc(size * sizeof(*p)); + for (size_t i = 0; i < size; ++i) { + p[i] = val; + } + return p; +} +``` + +## Pourquoi on peut retourner un tableau dynamique et pas un statique? + +. . . + +* Le tableau est alloué sur le **tas** et non sur la **pile**. +* La mémoire est gérée manuellement sur le tas, automatiquement sur la pile. + + + # Les *sanitizers* Problèmes mémoire courants: @@ -130,7 +182,7 @@ Outils pour leur détection: * Valgrind (outil externe). * Sanitizers (ajouts de marqueurs à la compilation). -Ici on utilise les sanitizers (modification de la ligne de compilation): +Ici on utilise les sanitizers (modification de la ligne de compilation, modifiez les *Makefile*): ```bash gcc -o main main.c -g -fsanitize=address -fsanitize=leak -- GitLab