2011-09-23 14 views
6

Tengo dos clases, A y Bar, ambas comparten un archivo de encabezado que tiene esencialmente foo * foo en él. La clase A crea una barra de objeto Bar *. Esto funciona bien Sin embargo, si hago la creación de instancias del objetoViolación de acceso ubicación de lectura 0x00000000. ¿palabra clave "nueva"?

Bar* bar = new Bar(); 

consigo una violación de acceso cuando la barra intenta hacer algo con foo. Por qué esto hace una diferencia?

Si no uso 'nuevo', funciona bien. Este es el error:

Unhandled exception at 0x003c17ea in Direct3DTutorial7.exe: 0xC0000005: Access violation reading 
location 0x00000000. 

Gracias.

+7

¿Puede incluir los archivos de encabezado? – riwalk

+1

Ejecútelo en un depurador, use la pila de llamadas para encontrar el punto de la falla y agregue las partes del código relevantes. –

+1

Esto probablemente significa que está intentando desreferenciar un puntero nulo. – Jesper

Respuesta

13
0xC0000005: Access violation reading location 0x00000000. 

Esto significa que estés eliminación de referencias a un puntero nulo, probablemente en el constructor de Bar, o en algún otro código llamado por este constructor. Use un depurador para determinar exactamente dónde.

0

Supongo que no está asignando su objeto Foo. Como es una variable global, se inicializa a cero en el inicio del programa, que para los punteros corresponde a un valor nulo.

0

¿Recordó construir un objeto Foo y asignarlo al puntero foo? Parece que tu constructor de barras intenta hacer algo con foo, pero aún no has creado el objeto Foo.

Cuestiones relacionadas