Corrupción de memoria en C++ al pasar una variable

Iniciado por egyware, 26 Noviembre 2011, 14:58 PM

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

egyware

Buenas Tardes
Tengo un problema de corrupción de memoria en uno de mis programas. Les cuento el chiste para que vean cual es mi problema (que ni google me ha podido ayudar :( )
Tengo una DLL que a travez de una función de una clase devuelve una variable que es del tipo b2World y con eso puedo crear nuevos cuerpos fisicos(petición de memoria). Cuando en mi programa (el que usa la DLL) trata de crear cualquier cuerpo fisico se cae, de hecho al hacer muchas depuraciones me he dado cuenta que los datos cambian cuando se pide más memoria.  Sin embargo cuando hago exactamente el mismo codigo para crear el body dentro de la misma DLL, este no se cae.
En la dll le tengo puesto todos los dllimport y dllexport, a excepción de box2d que  lo linkeo estaticamente tanto en la dll y en el programa.Tanto como la dll y el programa tengo el codigo.
Estoy usando Visual Studio (pero tengo  los mismos problemas al usar otro compilador codeblocks-mingw).

Espero que puedan ayudarme porque yo he buscado en google y no he pillado nada(de seguramente palabras de busqueda incorrectas).
Gracias de antemano.
Saludos

Unbr0ken

Al momento de crear esos "cuerpos", ¿los haces en la memoria tuya o de un proceso externo?...
Cita de: SnowcrashDiscutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

NO resuelvo dudas vía MP, para algo está el foro.

Eternal Idol

Los datos que dan no son suficientes como para adivinar nada siquiera, igual proba a pasarle el Application Verifier, tal vez detecte el error ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

egyware

Bueno
-- DLL
- World.h http://pastebin.com/j65fvA4K (linea
- World.cpp http://pastebin.com/TkxgPEZi
-- Program
- Gameloop.h http://pastebin.com/wNKUW55G
- Gameloop.cpp http://pastebin.com/1S3NEw6L problema en linea 7 y 12

Les paso el codigo para que tengan una idea (este no compila, le faltan cosas por sacar para que quede compilable).
Bueno la DLL la compilo y lo linkeo estaticamente con Box2D y al programa, le linkeo la DLL y Box2D(biblioteca estatica)
En la linea 2 y 3 creo el Mundo y obtengo el b2World, las lineas que siguen son para definir un body  y en la linea 7 se cae por corrupcion de memoria (lo he seguido paso a paso y cuando Box2d pide memoria cambian los datos(por ejemplo habia una variable en 1 y luego del allocate sale en 1231231) y se cae.
Ahora en vez de hacer la linea 7 yo puedo usar una funcion alternativa:

b2Body *World::createBody(b2BodyDef *def){
        return world.CreateBody(def);
}

definida en la linea 30 de World.h y FUNCIONA!!!, pero ahora se cae en la linea 12.
También he intendado copiar todo el codigo y compilarlo en la DLL y FUNCIONA TAMBIÉN!!!
Entonces lo que creo que sucede que el problema esta en pasar la variable
Código (cpp) [Seleccionar]
b2World &world = m_world->getWorld(); Linea 3 de Gameloop.cpp
pero ¿por qué? :huh: :huh: :huh:
No tengo idea.
Saludos, gracias de antemano

Eternal Idol

Configura el Application Verifier sobre el ejectuable y depura esta parte especialmente:
Código (c++) [Seleccionar]
m_world = new World();
b2World &world = m_world->getWorld();


¿Llama al constructor de la clase como debe ser? ¿Es m_world una instancia valida cuando llamas a getWorld (comproba las propiedades del objeto)?
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón