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:
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 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;
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
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; }
Pour l'allocation et la réallocation il n'y a aucun problème.
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; } }
Pourriez vous me dire ce qui ne va pas lors de la libération de mes tableaux?
Je vous remercie.
Partager