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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
int *p;
...
free(p);
p = NULL;
ou

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;
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
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;
	}
}
le problème c'est que ça n'a pas l'air de marcher ...

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