tobi222
Messages postés2Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention11 mars 2005
-
11 mars 2005 à 01:25
fabrice_pi
Messages postés91Date d'inscriptionvendredi 12 mars 2004StatutMembreDernière intervention 5 août 2005
-
11 mars 2005 à 14:30
J'ai créé une liste chainée toute simple avec où j'alloue de la mémoire dynamiquement et à la fin lorsque je détruis cette liste avec free visual m'envoit un message d'erreur. J'ai vérifié la mémoire a bien été alloué avec la fonction malloc, et la fonction free récupère bien cette mémoire, et si je clique sur "ignorer" ds le message d'erreur le programme continue de fonctionner exactement comme je veux. Tout marche sauf ce msg d'erreur de visual.
De plus ma liste chainée comprend environ 3000 structures, et pdt leur destruction, le programme plante juste sur la destruction de 2 structures (situé ds les 1700e et 2000e position).
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 11 mars 2005 à 03:45
Visual Basic!?!?!?!?!?!?!? T'en as fumé du bon toi ...
Ta liste chaînée, tu es sur de ne pas perdre de node?
Que malloc() n'échoue pas(j'en doute)?
Ton problème c'est que dans free(), en mode debug, il y à des `assertions`;
assert(NULL != ptr);
etc ... par exemple
si elle échoue alors il y à une raison.
char * ptr = malloc( 15 );
++ptr;
free( ptr ); /* << ca, ca va causer ce que tu as, le message d'erreur(un assert() qui échou) */
il peut y avoir plein de raison pour laquelle free() échoue ...
s'il te dis que le block n'est pas valide, alors ton pointeur
n'est pas valide, si tu lui passe NULL ou un pointeur non initialisé,
il échoue, etc ... etc ...
tobi222
Messages postés2Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention11 mars 2005 11 mars 2005 à 08:35
oui bien sur je voulais parler de visual c++ :s
sinon pour le malloc g mis un test juste après pour voir s'il renvoit une adresse NULL et ça n'arrive jamais.
Et j'ai regardé la structure qui fait planter le free, et ce qu'elle contient est correcte (dc je passe pas non plus o free un pointeur non initialisé). Et après la fonction free et le message d'erreur, la structure a bien été effacée !!!