Excepcion no controlada en 0xcdcdcdcd en xxxxxxx.exe:0xC0000005:Access violation

Iniciado por ftejada, 19 Abril 2014, 13:40 PM

0 Miembros y 1 Visitante están viendo este tema.

ftejada

Hola Gente! soy nuevo en el foro y es la primera vez que escribo.

Haber.... tengo un programa que estoy creando, en el que utilizo dos librerias (Ogre3d y PhysX 3.3) para intentar unirlas.

Alguien podría explicarme por qué tipo de causas sale el error: Excepcion no controlada en 0xcdcdcdcd en xxxxxxx.exe:0xC0000005:Access violation He leido por ahí que se refiere a que el programa intenta acceder a parte de la memoria que está reservada o algo así.

La verdad es que es mucho codigo para subirlo y si subo el "solution" de Visual C++ 2010 tendríais que instalar ambas librerias para poder compilarlo y ejecutarlo, por lo que simplemente me gustaría saber por qué, o mejor dicho, qué tipo de causas provocan este error y así intentar averiguar donde está el problema de mi aplicación y solucionarlo.

La aplicacion es muy simple, creo un "plano" como suelo y una caja a una altura determinada. Al correr la aplicacion la caja empieza a caer por la gravedad hasta que colisiona contra el suelo.
El caso es que he conseguido que la aplicación corra durante unos segundos, pero pasado ese tiempo la IDE se sale del programa y me salta el error.

Bueno espero vuestra ayuda. Saludos y gracias.

ivancea96

Access violation es que accedes a zonas de memoria que no tienes permitidas. Quizás sea un problema con punteros. Revisa que los punteros nunca apunten a zonas de memoria más allá de tu programa.

¿Algún puntero mal puesto?

ftejada

Cita de: ivancea96 en 19 Abril 2014, 13:56 PM
Access violation es que accedes a zonas de memoria que no tienes permitidas. Quizás sea un problema con punteros. Revisa que los punteros nunca apunten a zonas de memoria más allá de tu programa.

¿Algún puntero mal puesto?
Como puedo ver si un puntero apunta a una zona de memoria mas allá de mi programa???


xiruko

Cita de: ftejada en 19 Abril 2014, 20:07 PM
Como puedo ver si un puntero apunta a una zona de memoria mas allá de mi programa???

Depura tu programa. Si no sabes, aprende a hacerlo ya que es algo indispensable en un programador. Básicamente tienes dos opciones:

1. Usar algún depurador tipo gdb, o alguno que ya esté en el IDE que uses. Aquí puedes usar breakpoints, ver en cada instrucción el valor de tus variables, la pila, etc. Tienes muchísima información pero no es algo que se aprenda en dos días.

2. Usar printf() en puntos claves de tu programa para conseguir averiguar donde te tira ese error. Puedes poner cosas como "Puntero inicializado", "Antes del for", etc etc, así como imprimir los valores que tengan tus variables. Menos información pero más fácil de hacer, y muchas veces con esto se consigue ver el fallo tonto que hace que no corra el programa.

Yo probaría con la segunda opción para ver si con un poco de suerte eso es suficiente para encontrar el error, pero no estaría de más que fueras echándole un ojo al depurador que más te guste e ir aprendiendo a manejarlo.

Saludos.

ivancea96

Si dices que es mucho código, puedes empezar revisando ciclos donde trabajes con matrices, o revisar operator[] de vectores, en caso de que uses.

P3RV3RT

Pon breakpoints en varias funciones del programa (en el codigo ) para saber mas o menos de donde viene ese error... Una vez localizada la funcion, analizalo instruccion a instruccion, con el debugger de VS mejor, asi iras comprobando los valores que tienen tu variables y las que "deberian" de tener...

Como ya han comentado antes, ese error es debido a que un puntero esta apuntando  y seguramente modificando donde no tiene acceso, o en un array donde estas poniendo mas datos de los que soporta tu array...

ftejada

Voy indagar con la informacion que me habeis dado, haber si consigo encontrar el problema y solucionarlo. En dos o tres dias os contesto a ver qué pasó ya que ahora estoy fuera.
Muchas gracias a todos por la ayuda.