efegea
16/07/2006, 23:04
Lo he posteado en el hilo del Call of Dracula pero lo voy a poner también aquí para que se vea.
Mi problema es el siguiente:
El juego, aleatoriamente, peta, y según el depurador, es siempre en la llamada a SDL_FreeSurface, pero no siempre en la misma llamada. Esas llamadas están en los destructores de las clases, por lo que siempre son llamadas una sola vez cuando la instancia es destruida. Pero parece como si intentase liberar una surface que ya no existe, pero estoy seguro de que existe. Si comento las llamadas a SDL_FreeSurface ya no se cuelga el juego, pero claro, hay un "memory leak", tengo que liberar las surfaces por c0jones.
Es como si el puntero que apunta a la surface apuntase a otro sitio, es decir que conteniese basura, pero no me explico por qué :confused: o quizás es otra cosa, no sé, tal vez es un fallo tonto pero no doy con el
< - >
No es solo SDL_FreeSurface, acabo de descubrir que peta con todo. Aún no me explico que es lo que pasa, pero lo que está claro es que siempre peta en el destructor de alguna clase, aunque alguna vez ha petado en otro sitio. Lo que si es siempre ALEATORIO :confused: :confused: :confused:
< - >
Como es posible que pete aquí:
delete state;
state=0;
--> state=new CState(m_new_state);
Peta en el operador new, según gdb:
free () from /lib/libc.so.6
malloc () from /lib/libc.so.6
operator new () from /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6
CStatemgr::update (this=0x56b9e0) at states.cpp:338
main (argc=-1419118552,argv=0x16,envp=0x0) at main.cpp:392
< - >
Lo cachondo es que ayer funcionaba perfectamente >_<
< - >
mmm..me he dado cuenta que lo del operador new solo ocurre cuando retrocedo un estado al estado anterior..por ejemplo cuando voy a una habitación en la que he estado antes
< - >
Pues no, no es cuando voy a la habitacion anterior, es aleatorio
me estoy volviendo loco [Ahhh]
< - >
¡Hurra! ¡lo solucioné! :)
Mi problema es el siguiente:
El juego, aleatoriamente, peta, y según el depurador, es siempre en la llamada a SDL_FreeSurface, pero no siempre en la misma llamada. Esas llamadas están en los destructores de las clases, por lo que siempre son llamadas una sola vez cuando la instancia es destruida. Pero parece como si intentase liberar una surface que ya no existe, pero estoy seguro de que existe. Si comento las llamadas a SDL_FreeSurface ya no se cuelga el juego, pero claro, hay un "memory leak", tengo que liberar las surfaces por c0jones.
Es como si el puntero que apunta a la surface apuntase a otro sitio, es decir que conteniese basura, pero no me explico por qué :confused: o quizás es otra cosa, no sé, tal vez es un fallo tonto pero no doy con el
< - >
No es solo SDL_FreeSurface, acabo de descubrir que peta con todo. Aún no me explico que es lo que pasa, pero lo que está claro es que siempre peta en el destructor de alguna clase, aunque alguna vez ha petado en otro sitio. Lo que si es siempre ALEATORIO :confused: :confused: :confused:
< - >
Como es posible que pete aquí:
delete state;
state=0;
--> state=new CState(m_new_state);
Peta en el operador new, según gdb:
free () from /lib/libc.so.6
malloc () from /lib/libc.so.6
operator new () from /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6
CStatemgr::update (this=0x56b9e0) at states.cpp:338
main (argc=-1419118552,argv=0x16,envp=0x0) at main.cpp:392
< - >
Lo cachondo es que ayer funcionaba perfectamente >_<
< - >
mmm..me he dado cuenta que lo del operador new solo ocurre cuando retrocedo un estado al estado anterior..por ejemplo cuando voy a una habitación en la que he estado antes
< - >
Pues no, no es cuando voy a la habitacion anterior, es aleatorio
me estoy volviendo loco [Ahhh]
< - >
¡Hurra! ¡lo solucioné! :)