2012-09-12 12 views
9
valgrind --leak-check=full ./CH02_HelloTriangle 
==11404== Memcheck, a memory error detector 
==11404== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. 
==11404== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info 
==11404== Command: ./CH02_HelloTriangle 
==11404== 
==11404== Jump to the invalid address stated on the next line 
==11404== at 0x0: ??? 
==11404== by 0x6F9271A: ??? (in /usr/lib/fglrx/dri/fglrx_dri.so) 
==11404== Address 0x0 is not stack'd, malloc'd or (recently) free'd 
==11404== 
==11404== 
==11404== Process terminating with default action of signal 11 (SIGSEGV) 
==11404== Bad permissions for mapped region at address 0x0 
==11404== at 0x0: ??? 
==11404== by 0x6F9271A: ??? (in /usr/lib/fglrx/dri/fglrx_dri.so) 
==11404== 
==11404== HEAP SUMMARY: 
==11404==  in use at exit: 144,423 bytes in 407 blocks 
==11404== total heap usage: 1,009 allocs, 602 frees, 189,993 bytes allocated 
==11404== 
==11404== LEAK SUMMARY: 
==11404== definitely lost: 0 bytes in 0 blocks 
==11404== indirectly lost: 0 bytes in 0 blocks 
==11404==  possibly lost: 0 bytes in 0 blocks 
==11404== still reachable: 144,423 bytes in 407 blocks 
==11404==   suppressed: 0 bytes in 0 blocks 
==11404== Reachable blocks (those to which a pointer was found) are not shown. 
==11404== To see them, rerun with: --leak-check=full --show-reachable=yes 
==11404== 
==11404== For counts of detected and suppressed errors, rerun with: -v 
==11404== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 2 from 2) 
Segmentation fault (core dumped) 

Qual è il problema esattamente?Cosa significa valgrind per "passaggio all'indirizzo non valido" qui?

Se eseguo questa applicazione, è sufficiente uscire con un errore di errore di segmentazione, è un'applicazione OpenGL ES 2.0 compilata con AMD GLES SDK per desktop.

This the source per questa applicazione.

+0

Hai provato a eseguire questo sotto solo un tipico debugger? Questo non sembra una perdita di memoria, ma piuttosto una sorta di eccezione puntatore nullo, e non sono sicuro se Valgrind sia lo strumento appropriato per il debug di NPE. – Tim

+0

@Tim non ho la versione di debug di questa libreria OpenGL ES e non conosco altri strumenti validi per questo che posso usare senza una libreria di debug. – Ken

+0

Non penso che sia necessario eseguire il debug della libreria OGLES, ma piuttosto assicurarsi che l'applicazione che lo chiama non trasmetta valori nulli alle chiamate API. Potresti semplicemente passare attraverso il codice in qualunque IDE usi la tua particolare lingua. – Tim

risposta

9

Il codice in /usr/lib/fglrx/dri/fglrx_dri.so sta saltando attraverso un puntatore a funzione nulla.

Ovviamente la vera domanda è perché, ma poiché si tratta di un codice proprietario chiuso, non è facile scoprirlo. Se si sta chiamando qualsiasi funzione in quel codice che prende i puntatori di funzione come richiami, assicurarsi che non si passino loro i puntatori nulli sarebbe un buon inizio.

Fondamentalmente anche se questo non è un problema che valgrind è in grado di aiutarti a trovare ho paura, e certamente non ha nulla a che fare con una perdita di memoria.