2012-09-12 20 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) 

¿Cuál es el problema exactamente?¿Qué significa valgrind con "saltar a una dirección no válida" aquí?

Si ejecuto esta aplicación, simplemente sale con un error de segmentación, es una aplicación OpenGL ES 2.0 compilada con AMD GLES SDK para escritorio.

This the source para esta aplicación.

+0

¿Ha intentado ejecutar esto solo con un depurador típico? Esto no parece una pérdida de memoria, sino más bien algún tipo de excepción de puntero nulo, y no estoy seguro de si Valgrind es la herramienta adecuada para depurar NPE. – Tim

+0

@Tim no tengo la versión de depuración de esta biblioteca de OpenGL ES y no conozco otras herramientas que sean buenas para esto que pueda usar sin una biblioteca de depuración. – Ken

+0

No creo que deba depurar la biblioteca OGLES, sino que simplemente asegúrese de que su aplicación que la llama no pase valores nulos a las llamadas a la API. Podrías pasar por el código en cualquier IDE que use tu lenguaje particular. – Tim

Respuesta

9

El código en /usr/lib/fglrx/dri/fglrx_dri.so está saltando a través de un puntero de función nula.

Por supuesto, la verdadera pregunta es por qué, pero dado que se trata de un código fuente cerrado no es fácil encontrarlo. Si está llamando a cualquier función de ese código que tome indicadores de función como devoluciones de llamada, entonces asegurarse de que no les está enviando punteros nulos sería un buen comienzo.

Básicamente, aunque este no es un problema que valgrind pueda ayudarte a encontrar, me da miedo, y ciertamente no tiene nada que ver con una pérdida de memoria.

Cuestiones relacionadas