2014-09-10 11 views
5
*** glibc detected *** ./a.out: free(): corrupted unsorted chunks: 0x00000000007646b0 *** 
*** glibc detected *** ./a.out: malloc(): memory corruption: 0x00000000007635a0 *** 

Ho ricevuto l'errore sopra riportato. Ma sono sicuro di non usare la memoria dopo aver liberato. Perché ottengo l'errore sopra riportato?blocchi non selezionati danneggiati durante la chiamata gratuita()

+5

Utilizzare valgrind. Te lo dirà. –

risposta

4

Potrebbe essere che si stia tentando di liberare con un puntatore che non punta correttamente alla memoria dinamicamente alocata.

8

Tutti gli heap memorizzano alcuni tipi di metadati dentro di sé. Quando si esegue un malloc o un file libero, l'heap eseguirà spesso alcune funzioni di archiviazione nell'heap. Se rileva qualcosa di totalmente inaspettato nei meta-dati, normalmente si blocca.

È improbabile che le normali operazioni di heap causino tali problemi, pertanto è probabile che il tuo programma ne sia la causa. Poiché il tuo programma ha accesso a tutta la memoria nel processo inclusi i metadati dell'heap, il tuo programma potrebbe aver sovrascritto accidentalmente alcuni dei meta-dati.

Una causa probabile è scrivere oltre la fine di un buffer allocato. Molto probabilmente questa scrittura sarà consentita ed è estremamente probabile che corrompa i metadati dell'heap. Quando viene rilevato dall'heap, il programma si interromperà normalmente.

Problemi correlati