Bonjour,

J'ai un problème pour désallouer de la mémoire de plusieurs tableau lorsque je termine mon programme. En effet, lorsque je termine mon programme une erreur fatale apparait:

"pointer arithmetic involving pointer to freed memory"

Voici comment je libère ma mémoire:

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
27
28
29
30
31
32
33
 
 
	for(j=0; j<NbPal; j++)
		{
		free (TabTimePalAlim[j]); // Run time error!!!!
		TabTimePalAlim[j]=NULL;
		}
	free(TabTimePalAlim);
	TabTimePalAlim=NULL;
 
	for(j=0;j<NbPal;j++)
		{
		free (TabValPalAlim[j]);
		TabValPalAlim[j]=NULL;
		}
	free(TabValPalAlim);
	TabValPalAlim=NULL;
 
	for(j=0;j<NbPal;j++)
		{
		free (TabTimePalCh[j]);
		TabTimePalCh[j]=NULL;
		}
	free(TabTimePalCh);
	TabTimePalCh=NULL;
 
	for(j=0;j<NbPal;j++)
		{
		free (TabValPalCh[j]);
		TabValPalCh[j]=NULL;
		}
	free(TabValPalCh);
	TabValPalCh=NULL;
Pour allouer la mémoire j'utilise ce code:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
TabTimePalAlim=(double**) calloc(5,sizeof(double*));
		for(i=0; i<5; i++)
			TabTimePalAlim[i]=(double*) calloc(5,sizeof(double));	
 
		if(TabTimePalAlim==NULL)
			{
			MessagePopup("Erreur!!!", "Erreur lors de l'allocation de mémoire!");
 
			for(i=0; i<5; i++)
				{
				free(TabTimePalAlim[i]);
				TabTimePalAlim[i]=NULL;
				}
			free(TabTimePalAlim);
			TabTimePalAlim=NULL;
			}
 
		TabValPalAlim=(double**) calloc(5,sizeof(double*));
		for(i=0; i<5; i++)
			TabValPalAlim[i]=(double*) calloc(5,sizeof(double));
 
		if(TabValPalAlim==NULL)
			{
			MessagePopup("Erreur!!!", "Erreur lors de l'allocation de mémoire!");
 
			for(i=0; i<5; i++)
				{
				free(TabValPalAlim[i]);
				TabValPalAlim[i]=NULL;
				}
			free(TabValPalAlim);
			TabValPalAlim=NULL;
			}
 
 
		TabTimePalCh=(double**) calloc(5,sizeof(double*));
		for(i=0; i<5; i++)
			TabTimePalCh[i]=(double*) calloc(5,sizeof(double));
 
		if(TabTimePalCh==NULL)
			{
			MessagePopup("Erreur!!!", "Erreur lors de l'allocation de mémoire!");
 
			for(i=0; i<5; i++)
				{
				free(TabTimePalCh[i]);
				TabTimePalCh[i]=NULL;
				}
			free(TabTimePalCh);
			TabTimePalCh=NULL;
			}
 
		TabValPalCh=(double**) calloc(5,sizeof(double*));
		for(i=0; i<5; i++)
			TabValPalCh[i]=(double*) calloc(5,sizeof(double));
 
		if(TabValPalCh==NULL)
			{
			MessagePopup("Erreur!!!", "Erreur lors de l'allocation de mémoire!");
 
			for(i=0; i<5; i++)
				{
				free(TabValPalCh[i]);
				TabValPalCh[i]=NULL;
				}
			free(TabValPalCh);
			TabValPalCh=NULL;
			}
je réalloue également la mémoire en cas de besoin:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
newNbAlim=NbAlim;
				newNbCharge=NbCharge;
 
				realloc_DoublePtr(&TabTimePalAlim, newNbAlim);
				for(i=oldNbAlim ; i<NbAlim ; i++)
					TabTimePalAlim[i]= NULL;
				for(i=0 ; i<NbAlim ; i++)
					realloc_Double(&TabTimePalAlim[i], NbPal);
 
				realloc_DoublePtr(&TabTimePalCh, newNbCharge);
				for(i=oldNbCharge ; i<NbCharge ; i++)
					TabTimePalCh[i]= NULL;
				for(i=0 ; i<NbCharge ; i++)
					realloc_Double(&TabTimePalCh[i], NbPal);
 
 
				realloc_DoublePtr(&TabValPalCh, newNbCharge);
				for(i=oldNbCharge ; i<NbCharge ; i++)
					TabValPalCh[i]= NULL;
				for(i=0 ; i<NbCharge ; i++)
					realloc_Double(&TabValPalCh[i], NbPal);
 
 
				realloc_DoublePtr(&TabValPalAlim, newNbCharge);
				for(i=oldNbCharge ; i<NbCharge ; i++)
					TabValPalAlim[i]= NULL;
				for(i=0 ; i<NbCharge ; i++)
					realloc_Double(&TabValPalAlim[i], NbPal);
 
				for(i=0;i<NbAlim;i++)
					{
					for(j=0;j<NbPal;j++)
						{
						TabTimePalAlim[i][j]= 0;
						}
					}
 
 
				for(i=0;i<NbCharge;i++)
					{
					for(j=0;j<NbPal;j++)
						{
						TabTimePalCh[i][j]= 0;
						}
					}
 
 
				for(i=0;i<NbCharge;i++)
					{
					for(j=0;j<NbPal;j++)
						{
						TabValPalCh[i][j]= 0;
						}
					}
 
 
				for(i=0;i<NbAlim;i++)
					{
					for(j=0;j<NbPal;j++)
						{
						TabValPalAlim[i][j]= 0;
						}
					}
Pour l'allocation et la réallocation il n'y a aucun problème.

Pourriez vous me dire ce qui ne va pas lors de la libération de mes tableaux?

Je vous remercie.