2013-07-01 11 views
6

Ho visto alcuni dei post riguardanti valgrind ma non un singolo post mi ha aiutato a capire l'interpretazione dell'output di valgrind. mi sono imbattuto due programmi con valgrind (entrambi con perdite di memoria) di uscitaRiepilogo errori nell'output di Valgrind?

campione per la prova 1

==20422== LEAK SUMMARY: 
==20422== definitely lost: 448 bytes in 3 blocks 
==20422== indirectly lost: 786,460 bytes in 1 blocks 
==20422== possibly lost: 1,576,052 bytes in 46 blocks 
==20422== still reachable: 1,077,107 bytes in 2,333 blocks 
==20422== suppressed: 0 bytes in 0 blocks 
==20422== Rerun with --leak-check=full to see details of leaked memory 
==20422== 
==20422== For counts of detected and suppressed errors, rerun with: -v 
==20422== ERROR SUMMARY: 98307 errors from 5 contexts (suppressed: 2 from 2) 
Killed 

uscita per la prova 2

==20875== HEAP SUMMARY: 
==20875== in use at exit: 1,059,198 bytes in 2,047 blocks 
==20875== total heap usage: 3,019 allocs, 972 frees, 4,496,090 bytes allocated 
==20875== 
==20875== LEAK SUMMARY: 
==20875== definitely lost: 328 bytes in 2 blocks 
==20875== indirectly lost: 0 bytes in 0 blocks 
==20875== possibly lost: 1,600 bytes in 5 blocks 
==20875== still reachable: 1,057,270 bytes in 2,040 blocks 
==20875== suppressed: 0 bytes in 0 blocks 
==20875== Rerun with --leak-check=full to see details of leaked memory 
==20875== 
==20875== For counts of detected and suppressed errors, rerun with: -v 
==20875== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2) 

Se si guarda il riepilogo degli errori, Un'uscita dice che ci sono errori e altri dice che non ci sono errori (eventualmente entrambi hanno perdite)

La mia domanda è - - cosa viene considerato come errore in valgrind? (il manuale di valgrind non mi ha aiutato)

+0

Dovreste aver avuto alcuni messaggi di errore ad esempio lettura non valida prima che il sommario delle perdite nell'output 1 e 2 fossero soppressi – parkydr

+0

c'era una lunga lista di letture non valide e scrivere nel primo codice. – Meluha

+0

Stai usando OSX per caso? – StevenTsooo

risposta

6

Le perdite di memoria non sono considerate errori, non influenzano la logica del programma.

Gli errori sono cose come invalida legge e scrive.

Aggiornamento come risultato del commento: le letture e le scritture non valide nel test 1 riguardano 5 diverse aree di memoria a cui si accede 98307 volte.

Osservando le perdite, le grandi perdite indirette nel test 1 potrebbero indicare una struttura di dati collegata in cui è stata eliminata solo la radice.

Le perdite nel test 2 non sono troppo male. Come valgrind suggerisce di rieseguire con --leak-check = full che dovrebbe indicare quale bit di codice sta causando il problema.

Una spiegazione completa degli errori può essere trovato here

+0

Significa che nel primo codice c'è una memoria che non è stata allocata ma utilizzata e per il secondo codice la memoria è stata allocata ma non liberata. – Meluha

+0

Dovrai controllare gli errori effettivi, la lettura non valida significa solo che sta leggendo da qualche parte che non dovrebbe, potrebbe leggere la fine della memoria allocata. Le fughe di notizie sono un problema a parte - decisamente perso, significa che nulla punta a quel blocco di memoria in modo da non poterlo liberare, indirettamente perso significa che i puntatori ci sono ma nella memoria trapelata e possibilmente perso significa che c'è una catena di puntatori alla memoria, ma il collegamento intermedio potrebbe essere un valore casuale che funziona. – parkydr