double libre ou corruption (fasttop)

La section suivante de mon code me donne ce message lors de l’exécution de * la glibc détectée ./a.out: double libre ou corruption (fasttop): 0x08e065d0 * *

J’ai parcouru le code de nombreuses fois, mais je ne peux pas voir comment j’abuse du free (temp2)

 bool found= false; int x=0; for ( x=0; x<=312500; x++) { while (count num); temp->ptr=NULL; newNode = (NODE *)malloc(sizeof(NODE)); newNode->num=temp->num; newNode->ptr=NULL; if (first != NULL) { temp2=(NODE *)malloc(sizeof(NODE)); temp2=first; while (temp2 != NULL && !found) { if (temp2->num == newNode->num) {found=true;} temp2= temp2->ptr; } free(temp2); if (!found) { last->ptr=newNode; last=newNode; count=count+1; } } else { first = newNode; last = newNode; count=count+1; } fflush(stdin); } 

Le problème est ici:

  temp2=first; 

En gros, lorsque vous libérez temp2, vous libérez d’abord, pas la mémoire allouée ici:

  temp2=(NODE *)malloc(sizeof(NODE)); 

, qui rest une fuite de mémoire, car après l’affectation, il ne peut plus être libéré.

De plus, votre code a probablement quelques problèmes supplémentaires (l’un est que vous ne devriez pas utiliser fflush sur un stream d’entrée), mais sans plus de détails, il est impossible de le savoir.