Bonjour,
Je veux allouer de la mémoire dynamiquement pour 4 tableaux à 2 dimensions mais lors de l'éxécution, le test m'informe que l'allocation est impossible. Je programme sous labwindows CVI 8.5. Voici le code:
A chaque démarrage, le problème reviend. J'ai essayer avec la fonction malloc et l'allocation se fait correctement mais lors de la réallocation de mémoire (realloc) les problèmes reviennes (run time error:Attempt to realloc pointer to freed memory ).
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 TabTimePalAlim=(int**) calloc(5,sizeof(int*)); for(i=0; i<NbAlim; i++) TabTimePalAlim[i]=(int*) calloc(5,sizeof(int)); if(TabTimePalAlim[i]==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<NbAlim; i++) TabValPalAlim[i]=(double*) calloc(5,sizeof(double)); if(TabValPalAlim[i]==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=(int**) calloc(5,sizeof(int*)); for(i=0; i<NbCharge; i++) TabTimePalCh[i]=(int*) calloc(5,sizeof(int)); if(TabTimePalCh[i]==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<NbCharge; i++) TabValPalCh[i]=(double*) calloc(5,sizeof(double)); if(TabValPalCh[i]==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; }
voici la réallocation pour infos:
Pourriez vous me dire quel est le 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 TabTimePalAlim=realloc(TabTimePalAlim, NbAlim*sizeof(int*)); TabTimePalAlim=realloc(TabTimePalAlim, NbPal*sizeof(int)); if(TabTimePalAlim == NULL) { for(i=0; i<NbPal; i++) { free(TabTimePalAlim[i]); TabTimePalAlim[i]=NULL; } free(TabTimePalAlim); TabTimePalAlim=NULL; } TabValPalAlim=realloc(TabValPalAlim, NbAlim*sizeof(double*)); TabValPalAlim=realloc(TabValPalAlim, NbPal*sizeof(double)); if(TabValPalAlim == NULL) { for(i=0; i<NbPal; i++) { free(TabValPalAlim[i]); TabValPalAlim[i]=NULL; } free(TabValPalAlim); TabValPalAlim=NULL; } TabValPalCh=realloc(TabValPalCh, NbAlim*sizeof(double*)); TabValPalCh=realloc(TabValPalCh, NbPal*sizeof(double)); if(TabValPalCh == NULL) { for(i=0; i<NbPal; i++) { free(TabValPalCh[i]); TabValPalCh[i]=NULL; } free(TabValPalCh); TabValPalCh=NULL; } TabTimePalAlim=realloc(TabTimePalCh, NbAlim*sizeof(int*)); TabTimePalAlim=realloc(TabTimePalCh, NbPal*sizeof(int)); if(TabTimePalCh == NULL) { for(i=0; i<NbPal; i++) { free(TabTimePalCh[i]); TabTimePalCh[i]=NULL; } free(TabTimePalCh); TabTimePalCh=NULL; }
Je vous remercie.
Partager