elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  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 2,454 veces)
egyware


Desconectado Desconectado

Mensajes: 526



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

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 am »

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
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


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

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: 526



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

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
  1. b2Body *World::createBody(b2BodyDef *def){
  2.        return world.CreateBody(def);
  3. }
  4.  
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
  1. 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
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


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

Configura el Application Verifier sobre el ejectuable y depura esta parte especialmente:
Código
  1. m_world = new World();
  2. 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
Pasar una variable de un form a otro.
Programación Visual Basic
ciruit 1 1,956 Último mensaje 31 Enero 2006, 00:12 am
por ciruit
pasar variable javascript a php
PHP
soru13 1 3,002 Último mensaje 12 Abril 2012, 18:43 pm
por Shell Root
Pasar variable al siguiente .php - paypal - custom
PHP
extreme69 7 6,094 Último mensaje 28 Mayo 2012, 02:30 am
por extreme69
Corrupción de la memoria del kernel a través de Webroot SecureAnywhere
Noticias
wolfbcn 0 928 Último mensaje 18 Septiembre 2018, 02:07 am
por wolfbcn
Loader para memoria variable
Ingeniería Inversa
Marcelo! 8 3,319 Último mensaje 14 Mayo 2019, 17:18 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines