elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:49  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Corrupción de memoria en C++ al pasar una variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Corrupción de memoria en C++ al pasar una variable  (Leído 345 veces)
egyware


Desconectado Desconectado

Mensajes: 436


GameDeveloper


Ver Perfil WWW
Corrupción de memoria en C++ al pasar una variable
« en: 26 Noviembre 2011, 14:58 »

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


En línea

Unbr0ken

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Corrupción de memoria en C++ al pasar una variable
« Respuesta #1 en: 27 Noviembre 2011, 07:43 »

Al momento de crear esos "cuerpos", ¿los haces en la memoria tuya o de un proceso externo?...


En línea

Cita de: Snowcrash
Discutir 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
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Corrupción de memoria en C++ al pasar una variable
« Respuesta #2 en: 27 Noviembre 2011, 12:08 »

Los datos que dan no son suficientes como para adivinar nada siquiera, igual proba a pasarle el Application Verifier, tal vez detecte el error ...
En línea



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


Desconectado Desconectado

Mensajes: 436


GameDeveloper


Ver Perfil WWW
Re: Corrupción de memoria en C++ al pasar una variable
« Respuesta #3 en: 27 Noviembre 2011, 14:28 »

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:
Código
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
b2World &world = m_world->getWorld();
Linea 3 de Gameloop.cpp
pero ¿por qué? :huh: :huh: :huh:
No tengo idea.
Saludos, gracias de antemano
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Corrupción de memoria en C++ al pasar una variable
« Respuesta #4 en: 27 Noviembre 2011, 17:39 »

Configura el Application Verifier sobre el ejectuable y depura esta parte especialmente:
Código
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)?
En línea



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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Corrupción de memoria en Firefox y otros navegadores
Noticias
wolfbcn 0 193 Último mensaje 20 Agosto 2006, 20:54
por wolfbcn
reservar memoria de tamaño variable
Programación C/C++
W0lFy 9 1,437 Último mensaje 10 Enero 2009, 13:12
por Shrick
Microsoft Internet Explorer 7 (Prueba de Corrupción de memoria)
Bugs y Exploits
WHK 5 2,027 Último mensaje 3 Marzo 2009, 22:11
por R-Q-X
Pasar variable de formulario
Desarrollo Web
Riki_89D 2 2,274 Último mensaje 20 Octubre 2009, 14:50
por Mr. Crowley
asp.net pasar variable a una clase
Desarrollo Web
AiM 2 1,150 Último mensaje 14 Marzo 2010, 16:33
por Shell Root
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines