Liberation de la memoire - tableau dynamique a plusieurs dimensions

playmo420 Messages postés 50 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 6 juin 2006 - 4 mai 2004 à 15:12
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 6 mai 2004 à 10:50
Salut
J'ai un petit probleme : j'utilise des tableaux a plusieurs dimensions, mais lorsque je veux liberer la memoire (dans le destructeur de la classe), des erreurs "Debud assertion failed" se produisent... (j'utilise VC++ 6) voila la fonction qui cree les tableaux, puis le destructeur :

void GASchedulingGenome::initialiseArrays() {

int i,j,nbOperations(getNbOperations());

schedule= new int *[5];
for (i = 0; i < 5; i++) schedule[i]= new int [nbOperations];

lookup= new int **[nbJobs];

for (i = 0; i < nbJobs; i++)
{
lookup[i]= new int *[nbOperations];
for (j = 0; j < nbOperations; j++) lookup[i][j]= new int [2];
}
}

GASchedulingGenome::~GASchedulingGenome()
{
int i,j,nbOperations(getNbOperations());

//delete schedule;
for(i=0;i<5;++i) delete schedule[i];
delete schedule;

//delete lookup
for(i=0;i<nbJobs;++i) for(j=0;j<nbOperations;++j) delete lookup[i][j];
delete lookup;
}

Si vous avez une idee de ce qui va pas...

9 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
4 mai 2004 à 18:39
des delete[] pour les tableaux créés avec new[].
0
playmo420 Messages postés 50 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 6 juin 2006
5 mai 2004 à 09:39
J'avais essaye aussi (me semblais bien me rappeller d'un truc comme ca) mais ca ne marchait pas non plus...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 mai 2004 à 11:41
ce qui est possible aussi, c'est que pendant l'utilisation tu écrit en dehors des bornes du tableau et que tu écrases des données relatives à la gestion mémoire. dans ton code, il faut vérifier à chaque accès les indices passés.
0
playmo420 Messages postés 50 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 6 juin 2006
5 mai 2004 à 12:07
Je vais regarder mais ca m'etonnerait, j'avais bien fait attention a ca...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 mai 2004 à 12:13
//delete lookup
for(i=0;i<nbJobs;++i)
{
for(j=0;j<nbOperations;++j)
{
delete[] lookup[i][j];
}
delete[] lookup[i];
}
delete[] lookup;
0
playmo420 Messages postés 50 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 6 juin 2006
5 mai 2004 à 12:32
Toujours pas...
En fait ce qui est etrange c'est qu'un simple "delete[] lookup[0][0];" dans le destructeur provoque l'erreur...

J'y connais pas grand chose en gestion de la memoire, mais peut etre que le message d'erreur te dira qqchose :
"....
Expression : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
..."
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 mai 2004 à 17:46
c'est typique d'une écriture en dehors des bornes.
0
playmo420 Messages postés 50 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 6 juin 2006
6 mai 2004 à 09:37
Ok, je vais me replonger dedans alors...
Merci
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
6 mai 2004 à 10:50
ce qui est possible aussi c'est que ça soit une autre variable qui te fasse planter lookup (genre une chaîne trop courte qui écrase ce qui a après, en l'occurence lookup).
0
Rejoignez-nous