Ho qualche codice C++ nel mio progetto OS X che alloca una matrice così:malloc: Invalid puntatore rimossa da lista libera
C * p = new C[lengthHint + 2];
Questo è in una classe template; C
è unsigned short
. lengthHint
è 1. Questo è tutto irrilevante. L'errore che ottengo in fase di esecuzione è:
malloc: *** error for object 0x60800000c4f0: Invalid pointer dequeued from free list
*** set a breakpoint in malloc_error_break to debug
Sembra malloc
sta fallendo perché una precedente chiamata a free
liberato qualcosa che non era valido. Ma sembra che lo free
si sarebbe lamentato al momento.
Ovviamente ci sono milioni di malloc/free
e new/delete
chiamate in corso di esecuzione e questo stesso codice viene eseguito senza problemi in altri programmi in esecuzione su iOS e OS X. Non sono sicuro come affrontare il debug questo e sto cercando suggerimenti.
@ Craig: In ogni caso, sembra che [valgrind] (http://valgrind.org/) gira su OS X, quindi mi piacerebbe iniziare con quello. –
@Craig - 'imposta un punto di interruzione in malloc_error_break per eseguire il debug' Beh, l'hai fatto? Non uso XCode, ma se questo è quello che dice di fare, penso che dovresti provare a farlo. Quindi dai uno sguardo allo stack delle chiamate. – PaulMcKenzie
Come @Mike Seymour menziona valgrind è probabilmente la migliore risposta a * trovare * questo problema. Tuttavia è possibile * completamente * prevenire * tali problemi interamente semplicemente non facendo la gestione manuale della memoria (puntatori intelligenti e contenitori adeguati). –