probleme allocation dynamique de mémoire
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:
Code:
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;
} |
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 ).
voici la réallocation pour infos:
Code:
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;
} |
Pourriez vous me dire quel est le problème?
Je vous remercie.