Bonjour tout le monde voici mon problème:
J'utilise pas mal d'allocations et réallocations mémoire dans mon code car je dois construire des tableaux 1D et 2D dont je ne connais pas à l'avance la taille. Et donc j'utilise aussi beaucoup de désallocations . pour éviter d'avoir à écrire à chaque fois :
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int *p; ... free(p); p = NULL;
j'utilise à la place deux fonctions qui vont me faire cette libération. voici ces deux fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int i; int** p; ... for(i = 0; i < nblignes; i++) { free(p[i]); p[i] = NULL; } free(p); p = NULL;
le problème c'est que ça n'a pas l'air de marcher ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 void destroy1(int* p) { if (p != NULL) { free(p); p = NULL; } } void destroy2(int** pp, int nbp) { int i; if(pp != NULL) { for(i = 0; i < nbp; i++) { if(pp[i] != NULL){ free(pp[i]); pp[i] = NULL; } } free(pp); pp = NULL; } }
quand je détruit un pointeur et que je teste s'il est égal à NULL, cela me renvoie 0.
Peut être avez vous une idée sur ce problème.
Merci d'avance
Partager