morceaux non sortingés corrompus lors de l’appel de free ()

*** glibc detected *** ./a.out: free(): corrupted unsorted chunks: 0x00000000007646b0 *** *** glibc detected *** ./a.out: malloc(): memory corruption: 0x00000000007635a0 *** 

Je reçois l’erreur ci-dessus. Mais je suis sûr que je n’utilise pas la mémoire après avoir libéré. Pourquoi ai-je l’erreur ci-dessus?

Tous les tas, stockent certains types de méta-données à l’intérieur de lui-même. Lorsque vous effectuez une opération malloc ou free, le segment exécute souvent des fonctions de comptabilité sur le segment. S’il détecte quelque chose de totalement inattendu dans les métadonnées, il se bloque normalement.

Les opérations de tas normales sont très peu susceptibles de causer de tels problèmes, votre programme est donc probablement la cause. Étant donné que votre programme a access à toute la mémoire du processus, y compris les métadonnées du segment de mémoire, votre programme aurait pu accidentellement écraser certaines des métadonnées.

Une cause probable est l’écriture au-delà de la fin d’un tampon alloué. Cette écriture sera très probablement autorisée et est extrêmement susceptible de corrompre les méta-données de tas. Lorsque ceci est détecté par le tas, votre programme sera normalement abandonné.

Il se peut que vous essayiez de libérer avec un pointeur qui ne pointe pas correctement vers la mémoire allouée dynamicment.