Puoi fare diverse cose. Su un'applicazione a 32 bit non modificata in Windows potresti essere in grado di utilizzare DrMemory .
(Presumo che tu abbia già configurato il tuo compilatore per emettere tutti gli avvertimenti possibili. Non sottovalutare mai i potenziali problemi che si nascondono dietro un "avvertimento").
Puoi anche portare il tuo programma su Linux (forse su una macchina virtuale VMware, forse) e usare Valgrind . Quindi, non appena esegui il programma, verrai informato di una serie di possibili errori nel codice, completi di nome file, numero di riga e descrizione.
Infine, ci sono "librerie di controllo della memoria" ( eFence , ma ce ne sono altre) che compilerai / collegherai con il tuo programma ANSI C e sostituirai la maggior parte dei modi in cui potresti rovinare la memoria. A volte dovrai anche includere chiamate ad alcune funzioni di controllo, in modo che il tuo codice diventi qualcosa come:
CHECKPOINT
at = getAnotherTree(i++, info);
CHECKPOINT
Quindi, se esegui una chiamata standard difettosa in getAnotherTree()
, riceverai un errore come
treebuild.c at line 597: strcpy: attempt to copy 192 bytes into 128-byte buffer
ABORTING
e se lo fai a mano, per esempio con
for (i = 0; i < bufSize; i++) {
buffer[i] = 0;
}
quindi il secondo punto di controllo genererà un errore come
treebuild.c at line 1080: CHECKPOINT FAILURE
quindi individuando la fonte dell'errore in qualcosa nel flusso del programma tra l'ultimo checkpoint valido e l'altro fallito.