Aborta sin motivos

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Aborta sin motivos

Notapor Ezequiel Pereira » Jue Feb 14, 2013 1:01 am

Estoy haciendo un juego a la par que aprendo sobre C++ y SDL pero cada tanto me tranco en algún problema.
Esta vez mi problema es que al cerrar la ventana, la mayoría de las veces aparece un mensaje de error.

Puede ser:
Código: Seleccionar todo
*** glibc detected *** ./Juego: corrupted double-linked list: 0x08dec998 ***

Que requiere matar el proceso con "kill -9 pid".

O también puede ser:
Código: Seleccionar todo
*** glibc detected *** /home/ezequiel/Escritorio/SDL/C++/Juego: free(): invalid next size (fast): 0x0808be20 ***
...Una larga lista de librerías...
Abortado (`core' generado)


En ambos casos quedan recursos sin liberar desperdiciados porque el error siempre pasa al intentar liberar algún recurso.

Descargar código de mi programa

Para compilar:
g++ -o Juego Juego.cpp `sdl-config --cflags --libs` -lSDL_image


¿Por qué los errores y como los soluciono?
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay

Re: Aborta sin motivos

Notapor Barajas » Jue Feb 14, 2013 3:23 am

Has intentado compilarlo asi:

g++ codigo.cpp -o ejecutable -lSDL -lSDL_image
//o con
g++ codigo.cpp -o ejecutable -lSDL -lSDL_image -I/usr/include/SDL


De cualquier manera, creo que es más un error de memoria y no de SDL.

Creo que lo más conveniente es que coloques salidas, que imprimas en la terminal lo que hace, para seguir el desarrollo del programa y saber en donde aborta y poder corregirlo.
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Aborta sin motivos

Notapor Ezequiel Pereira » Jue Feb 14, 2013 11:08 am

Falla en las ultimas lineas:
personaje.Free();
otro.Free();
sala.Free();
SDL_FreeSurface(screen);

return 0;
}


En cualquier parte, incluso en el corchete :? .

Si falla al liberar memora, en el depurador me aparece:
*** glibc detected *** /home/ezequiel/Escritorio/SDL/C++/Juego: free(): invalid next size (fast): 0x0808be08 ***
...Una larga lista de librerías...
Program received signal SIGABRT, Aborted.
0xb7fdd424 in __kernel_vsyscall ()


O me puede aparecer:
Program received signal SIGSEGV, Segmentation fault.
0xb7cd8a0e in _int_free (av=0xb7e08440 <main_arena>, p=0x8077400, have_lock=0) at malloc.c:4085
4085 malloc.c: No existe el archivo o el directorio.


Pero si falla en el corchete:
__libc_start_main (main=0x8048c75 <main()>, argc=1, ubp_av=0xbffff384, init=0x804a600 <__libc_csu_init>, 
fini=0x804a670 <__libc_csu_fini>, rtld_fini=0xb7fed270 <_dl_fini>, stack_end=0xbffff37c) at libc-start.c:258
258 libc-start.c: No existe el archivo o el directorio.


Se supone que debe liberar recursos, pero falla y no logro entenderlo.
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay

Re: Aborta sin motivos

Notapor hugoruscitti » Jue Feb 14, 2013 3:36 pm

Me parece que liberar la superficie de pantalla "screen" puede estar
dando problemas, en la documentación de SDL indican que esta superficie
se libera al llamar a SDL_Quit:

http://sdl.beuc.net/sdl.wiki/SDL_SetVid ... df24a6a949

¿Será eso?
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Aborta sin motivos

Notapor Ezequiel Pereira » Jue Feb 14, 2013 5:36 pm

hugoruscitti escribió:Me parece que liberar la superficie de pantalla "screen" puede estar
dando problemas, en la documentación de SDL indican que esta superficie
se libera al llamar a SDL_Quit:

http://sdl.beuc.net/sdl.wiki/SDL_SetVid ... df24a6a949

¿Será eso?


Estas confundido, screen es una superficie normal y window es la superficie de la ventana (Echa con SetVideoMode).
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay

Re: Aborta sin motivos

Notapor hugoruscitti » Vie Feb 15, 2013 12:12 am

ah, ok... entonces no era eso :)
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Aborta sin motivos

Notapor Barajas » Vie Feb 15, 2013 2:23 pm

Creo que descubrí el error. No tienen definido un destructor Personaje ni Sala.

Además, noto que cuando vas a salir del programa liberas la memoria llamando manualmente a una función ( personaje.Free(); ) . Creo que seria más fácil llamar a la liberación en el destructor, el cual, -si el objeto no es creado con new- es llamado automáticamente al finalizar esa sección del código.

Mira este código en el que trabajo:

class Imagen {
protected:
SDL_Surface *image;
SDL_Rect Pos;
SDL_Rect Rect;
SDL_Rect ColRect;
char *src;
public:
friend class Sprite;
//constructor
Imagen(){
this->image = Crea_superficie(32,32);
this->SetRect();
this->SetPos(0,0);
this->Fill(NEGRO);
cout << ">> Creando un objeto Imagen ... "<<endl;
}
//Destructor del objeto
~Imagen(){
//aquí podrías colocar el código de
//tu función Free...
SDL_FreeSurface(this->image);
cout << ">> Liberado un objeto Imagen ... "<<endl;
}
};

/*
El resto del código de esta clase ( métodos, y otros constructores )
es de momento, secreto de estado XD
*/


Espero que eso sea lo que buscas. :)
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Aborta sin motivos

Notapor Ezequiel Pereira » Vie Feb 15, 2013 5:04 pm

No conocía el uso de constructores y destructores, esta bueno, me ahorra pedazos de código.
Pero el problema persiste.
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay

Re: Aborta sin motivos

Notapor Barajas » Dom Feb 17, 2013 7:13 pm

Interesante.
¿Podrías subir el código para poder bajarlo y compilarlo? (como lo tienes solo puedo ver el código)
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Aborta sin motivos

Notapor Ezequiel Pereira » Dom Feb 17, 2013 7:57 pm

Ok, el código esta aquí.
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay

Re: Aborta sin motivos

Notapor Barajas » Lun Feb 18, 2013 7:35 am

Ok, ya vi el error, esta en el destructor de la Sala, en el momento en el cual intentas liberar la memoria de "lines" con free.

Intenta omitir el liberar la memoria de lines, y el programa no fallara.
~Sala(){
short i;
printf("Destructor de sala\n");
/**
for (i=0 ; i<=y ; i++){ free(lines[i]); }
free(lines);
**/
SDL_FreeSurface(blocks);
SDL_FreeSurface(blist);
fclose(map);
fclose(colision);
}



Pero, si consideras muy importante liberar la memoria de esa matriz, es mejor utilizar las técnicas de c++. De hecho, veo que tu código es mucho más parecido a la esencia del "C puro" que a la de C++, lo cual puede verse por la manera en la cual estas creando el char ** en la función "hacer_lineas".

Utiliza las ventajas que te da c++. Este es un ejemplo de como crear un char ** dinamico, pero en el estilo de c++:

#include<iostream>// only header required here
using namespace std;

int main()
{
int row, column = 25;// column was not initialized
cout << "How many words will you enter? ";
cin >> row;
/*
La creación del char **
*/
char **String = 0;// no need to be global variable
String = new char *[row];
int i;
for (i=0; i < row; i++)
String[i] = new char [column];// 25 characters per word. Do not exceed 24 + one for null terminator)


for (i = 0; i < row; i++)
{
cout << "Enter word " << i+1 << ": ";
cin >> String[i];// no need to cin 1 character at a time
}

cout << "Reverse: " << endl;
for (i = row-1; i > -1; i--)
{
cout << String[i] << endl;
}
/*
Borrando el char **
*/
// release dynamically allocated memory
for (i=0; i < row; i++)
delete [] String[i];// each array of characters

delete [] String;// the array of pointers

return 0;// return type is integer
}

(ese pedazo de código salio de aquí: http://www.cplusplus.com/forum/beginner/35271/)

Espero que te sea útil, y si tienes dudas, pregunta ;)
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Aborta sin motivos

Notapor Ezequiel Pereira » Lun Feb 18, 2013 11:58 am

Hice lo que dijiste Barajas, pero ahora tengo 3 problemas.

Parecen suceder al azar porque no siempre suceden:

El primero es al crear la superficie sala.blocks, en gdb muestra:
util.h:235 blocks = SDL_CreateRGBSurface(0, x*50, y*50, 24, 16711680, 65280, 255, 0);
Program received signal SIGSEGV, Segmentation fault.
_int_malloc (av=0xb7e07440 <main_arena>, bytes=60) at malloc.c:3553
3553 malloc.c: No existe el archivo o el directorio.


Los otros 2 no logro hacer que aparezcan en gdb, uno me muestra en la consola (Creo que ocurre en util.h:100):
Juego: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Abortado (`core' generado)


Y el otro no me muestra nada, la ventana se queda negra (Creo que se tranca en util.h:235).

Mi codigo
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay

Re: Aborta sin motivos

Notapor Barajas » Lun Feb 18, 2013 5:36 pm

Ok, intenta cambiar la profundidad de color en todo el programa, es decir, no uses una profundidad de 24 si no, una de 32, es mejor ya que trabajas con superficies RGB.

Cambia en el archivo Juego
window = SDL_SetVideoMode(650,500,24,SDL_HWSURFACE);
/*
Por esto (nota el 32 en lugar de 24):
*/
window = SDL_SetVideoMode(650,500,32,SDL_HWSURFACE);


SDL_CreateRGBSurface(0, x*50, y*50, 24, 16711680, 65280, 255, 0);
/*
Por este otro:
*/
SDL_CreateRGBSurface(0, x*50, y*50, 32, 16711680, 65280, 255, 0);
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Aborta sin motivos

Notapor Ezequiel Pereira » Lun Feb 18, 2013 10:26 pm

Uso 24 porque necesito ahorrar recursos de mi Magallanes.
Además no me sirvió eso, es más, me aparecieron 2 errores nuevos:

Program received signal SIGSEGV, Segmentation fault.
__strcpy_ssse3 () at ../sysdeps/i386/i686/multiarch/strcpy-ssse3.S:143
143 ../sysdeps/i386/i686/multiarch/strcpy-ssse3.S: No existe el archivo o el directorio.


*** glibc detected *** ./Juego: malloc(): smallbin double linked list corrupted: 0xb754ea88 ***


Ni idea de que podrá ser...
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay

Re: Aborta sin motivos

Notapor Barajas » Mar Feb 19, 2013 1:56 am

Bien, a mi si me compila y se ejecuta sin errores, (con algunas modificaciones); aquí tienes el link del programa.
http://db.tt/vaip7JWo

Ezequiel Pereira escribió:Uso 24 porque necesito ahorrar recursos de mi Magallanes.


En realidad se pueden hacer mejor manejo de recursos si se fija un numero máximo de FPS, pero en tu caso, el consumo exagerado de recursos es por la cantidad extraordinaria de sentencias "if" (yo le agregue al código mi versión de control de FPS, pero siegue consumiendo los mismos recursos)

Por otro lado, y sin animo de ser grosero, solo vale esa escusa si las magallanes tuvieran menos de 128 megas de RAM y en ese caso, seria mejor una profundidad de 16 bits, cosa que no es ;).

No me lo tomes a mal, solo lo digo por que la computadora en la que programo es una netbook de 1Gb de RAM.

Como nota, a veces es mucho más simple reescribir el código de otra forma, en lugar de encontrar el error. :oops: :roll:
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Aborta sin motivos

Notapor Ezequiel Pereira » Mar Feb 19, 2013 1:34 pm

No termino de entender bien que hiciste pero funciona más rápido :D.
Pero volvimos a los mismos errores del principio.
Al compilar otra ves puede funcionar pero otras veces no, pero en ninguna compilación queda bien (Incluso el ejecutable que viene en el archivo sale a veces con un Abortado (`core' generado) :cry: )

Si a vos te funciona bien, entonces quizás mi MG tiene algún defecto (Algo que creo posible porque desde que me cambiaron la placa madre funciona más lenta para algunas cosas).

Salidas en GDB (Código inalterado):

Al cerrar el programa:

Program received signal SIGSEGV, Segmentation fault.
0xb7cd7a0e in _int_free (av=0xb7e07440 <main_arena>, p=0x809d4e0, have_lock=0) at malloc.c:4085
4085 malloc.c: No existe el archivo o el directorio.


*** glibc detected *** /home/ezequiel/Escritorio/SDL/Barajas/Juego: free(): invalid next size (fast): 0x0809de48 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb7cd6ee2]
/usr/lib/i386-linux-gnu/libSDL-1.2.so.0(+0x2b455)[0xb7f5c455]
/usr/lib/i386-linux-gnu/libSDL-1.2.so.0(SDL_FreeSurface+0x86)[0xb7f5ec06]
/home/ezequiel/Escritorio/SDL/Barajas/Juego[0x8049ab0]
/home/ezequiel/Escritorio/SDL/Barajas/Juego[0x8049761]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb7c7a4d3]
/home/ezequiel/Escritorio/SDL/Barajas/Juego[0x8048b91]
======= Memory map: ========
08048000-0804b000 r-xp 00000000 08:01 276286 /home/ezequiel/Escritorio/SDL/Barajas/Juego
0804b000-0804c000 r--p 00002000 08:01 276286 /home/ezequiel/Escritorio/SDL/Barajas/Juego
0804c000-0804d000 rw-p 00003000 08:01 276286 /home/ezequiel/Escritorio/SDL/Barajas/Juego
0804d000-080f5000 rw-p 00000000 00:00 0 [heap]
b6c54000-b6d92000 rw-s 00000000 00:04 15892492 /SYSV00000000 (deleted)
b6d92000-b6de9000 rw-p 00000000 00:00 0
b6e81000-b6e86000 r-xp 00000000 08:01 265349 /usr/lib/i386-linux-gnu/libXfixes.so.3.1.0
b6e86000-b6e87000 r--p 00004000 08:01 265349 /usr/lib/i386-linux-gnu/libXfixes.so.3.1.0
b6e87000-b6e88000 rw-p 00005000 08:01 265349 /usr/lib/i386-linux-gnu/libXfixes.so.3.1.0
b6e88000-b6e90000 r-xp 00000000 08:01 265367 /usr/lib/i386-linux-gnu/libXrender.so.1.3.0
b6e90000-b6e91000 r--p 00007000 08:01 265367 /usr/lib/i386-linux-gnu/libXrender.so.1.3.0
b6e91000-b6e92000 rw-p 00008000 08:01 265367 /usr/lib/i386-linux-gnu/libXrender.so.1.3.0
b6e92000-b6e9b000 r-xp 00000000 08:01 265341 /usr/lib/i386-linux-gnu/libXcursor.so.1.0.2
b6e9b000-b6e9c000 r--p 00008000 08:01 265341 /usr/lib/i386-linux-gnu/libXcursor.so.1.0.2
b6e9c000-b6e9d000 rw-p 00009000 08:01 265341 /usr/lib/i386-linux-gnu/libXcursor.so.1.0.2
b6eae000-b6eaf000 r--p 00fd4000 08:01 267231 /usr/lib/locale/locale-archive
b6eaf000-b6fe0000 r--p 00d6c000 08:01 267231 /usr/lib/locale/locale-archive
b6fe0000-b701f000 r--p 002fc000 08:01 267231 /usr/lib/locale/locale-archive
b701f000-b721f000 r--p 00000000 08:01 267231 /usr/lib/locale/locale-archive
b721f000-b7223000 rw-p 00000000 00:00 0
b7223000-b7236000 r-xp 00000000 08:01 131318 /lib/i386-linux-gnu/libresolv-2.15.so
b7236000-b7237000 r--p 00013000 08:01 131318 /lib/i386-linux-gnu/libresolv-2.15.so
b7237000-b7238000 rw-p 00014000 08:01 131318 /lib/i386-linux-gnu/libresolv-2.15.so
b7238000-b723a000 rw-p 00000000 00:00 0
b723a000-b7240000 r-xp 00000000 08:01 265803 /usr/lib/i386-linux-gnu/libogg.so.0.8.0
b7240000-b7241000 r--p 00005000 08:01 265803 /usr/lib/i386-linux-gnu/libogg.so.0.8.0
b7241000-b7242000 rw-p 00006000 08:01 265803 /usr/lib/i386-linux-gnu/libogg.so.0.8.0
b7242000-b726b000 r-xp 00000000 08:01 265968 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
b726b000-b726c000 ---p 00029000 08:01 265968 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
b726c000-b726d000 r--p 00029000 08:01 265968 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
b726d000-b726e000 rw-p 0002a000 08:01 265968 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
b726e000-b73d4000 r-xp 00000000 08:01 265970 /usr/lib/i386-linux-gnu/libvorbisenc.so.2.0.8
b73d4000-b73e5000 r--p 00165000 08:01 265970 /usr/lib/i386-linux-gnu/libvorbisenc.so.2.0.8
b73e5000-b73e6000 rw-p 00176000 08:01 265970 /usr/lib/i386-linux-gnu/libvorbisenc.so.2.0.8
b73e6000-b73e7000 rw-p 00000000 00:00 0
b73e7000-b7435000 r-xp 00000000 08:01 265311 /usr/lib/i386-linux-gnu/libFLAC.so.8.2.0
b7435000-b7436000 r--p 0004e000 08:01 265311 /usr/lib/i386-linux-gnu/libFLAC.so.8.2.0
b7436000-b7437000 rw-p 0004f000 08:01 265311 /usr/lib/i386-linux-gnu/libFLAC.so.8.2.0
b7437000-b744d000 r-xp 00000000 08:01 131275 /lib/i386-linux-gnu/libnsl-2.15.so
b744d000-b744e000 r--p 00015000 08:01 131275 /lib/i386-linux-gnu/libnsl-2.15.so
b744e000-b744f000 rw-p 00016000 08:01 131275 /lib/i386-linux-gnu/libnsl-2.15.so
b744f000-b7451000 rw-p 00000000 00:00 0
b7451000-b7456000 r-xp 00000000 08:01 265345 /usr/lib/i386-linux-gnu/libXdmcp.so.6.0.0
b7456000-b7457000 r--p 00004000 08:01 265345 /usr/lib/i386-linux-gnu/libXdmcp.so.6.0.0
b7457000-b7458000 rw-p 00005000 08:01 265345 /usr/lib/i386-linux-gnu/libXdmcp.so.6.0.0
b7458000-b745a000 r-xp 00000000 08:01 265334 /usr/lib/i386-linux-gnu/libXau.so.6.0.0
b745a000-b745b000 r--p 00001000 08:01 265334 /usr/lib/i386-linux-gnu/libXau.so.6.0.0
b745b000-b745c000 rw-p 00002000 08:01 265334 /usr/lib/i386-linux-gnu/libXau.so.6.0.0
b745c000-b7461000 r-xp 00000000 08:01 265398 /usr/lib/i386-linux-gnu/libasyncns.so.0.3.1
b7461000-b7462000 r--p 00004000 08:01 265398 /usr/lib/i386-linux-gnu/libasyncns.so.0.3.1
b7462000-b7463000 rw-p 00005000 08:01 265398 /usr/lib/i386-linux-gnu/libasyncns.so.0.3.1
b7463000-b7464000 rw-p 00000000 00:00 0
b7464000-b74d1000 r-xp 00000000 08:01 265894 /usr/lib/i386-linux-gnu/libsndfile.so.1.0.25
b74d1000-b74d3000 r--p 0006c000 08:01 265894 /usr/lib/i386-linux-gnu/libsndfile.so.1.0.25
b74d3000-b74d4000 rw-p 0006e000 08:01 265894 /usr/lib/i386-linux-gnu/libsndfile.so.1.0.25
b74d4000-b74d8000 rw-p 00000000 00:00 0
b74d8000-b74e0000 r-xp 00000000 08:01 131347 /lib/i386-linux-gnu/libwrap.so.0.7.6
b74e0000-b74e1000 r--p 00007000 08:01 131347 /lib/i386-linux-gnu/libwrap.so.0.7.6
b74e1000-b74e2000 rw-p 00008000 08:01 131347 /lib/i386-linux-gnu/libwrap.so.0.7.6
b74e2000-b74ed000 r-xp 00000000 08:01 265735 /usr/lib/i386-linux-gnu/libjbig.so.0.0.0
b74ed000-b74ee000 r--p 0000a000 08:01 265735 /usr/lib/i386-linux-gnu/libjbig.so.0.0.0
b74ee000-b74f1000 rw-p 0000b000 08:01 265735 /usr/lib/i386-linux-gnu/libjbig.so.0.0.0
b74f1000-b7515000 r-xp 00000000 08:01 131257 /lib/i386-linux-gnu/liblzma.so.5.0.0
b7515000-b7516000 r--p 00024000 08:01 131257 /lib/i386-linux-gnu/liblzma.so.5.0.0
b7516000-b7517000 rw-p 00025000 08:01 131257 /lib/i386-linux-gnu/liblzma.so.5.0.0
b7517000-b752e000 r-xp 00000000 08:01 131349 /lib/i386-linux-gnu/libz.so.1.2.7
b752e000-b752f000 r--p 00016000 08:01 131349 /lib/i386-linux-gnu/libz.so.1.2.7
b752f000-b7530000 rw-p 00017000 08:01 131349 /lib/i386-linux-gnu/libz.so.1.2.7
Program received signal SIGABRT, Aborted.
0xb7fdd424 in __kernel_vsyscall ()


Al empezar:

*** glibc detected *** /home/ezequiel/Escritorio/SDL/Barajas/Juego: free(): invalid next size (fast): 0x0809de08 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb7cd6ee2]
/usr/lib/i386-linux-gnu/libX11.so.6(+0x39449)[0xb79ed449]
/usr/lib/i386-linux-gnu/libX11.so.6(_XReply+0x211)[0xb79ee7e1]
/usr/lib/i386-linux-gnu/libX11.so.6(XQueryExtension+0xa4)[0xb79e3a34]
/usr/lib/i386-linux-gnu/libX11.so.6(XInitExtension+0x4a)[0xb79d795a]
/usr/lib/i386-linux-gnu/libXext.so.6(XextAddDisplay+0x54)[0xb79aeb14]
/usr/lib/i386-linux-gnu/libXext.so.6(+0xc52e)[0xb79ae52e]
/usr/lib/i386-linux-gnu/libXext.so.6(+0xc875)[0xb79ae875]
/usr/lib/i386-linux-gnu/libXext.so.6(XextAddDisplay+0x286)[0xb79aed46]
/usr/lib/i386-linux-gnu/libXext.so.6(+0x777e)[0xb79a977e]
/usr/lib/i386-linux-gnu/libXext.so.6(XShmPutImage+0x21)[0xb79aa011]
/usr/lib/i386-linux-gnu/libSDL-1.2.so.0(+0x3c731)[0xb7f6d731]
/usr/lib/i386-linux-gnu/libSDL-1.2.so.0(SDL_UpdateRects+0x1fe)[0xb7f5fa3e]
/usr/lib/i386-linux-gnu/libSDL-1.2.so.0(SDL_UpdateRect+0x99)[0xb7f5fbb9]
/usr/lib/i386-linux-gnu/libSDL-1.2.so.0(SDL_Flip+0x64)[0xb7f5fe84]
/home/ezequiel/Escritorio/SDL/Barajas/Juego[0x8048f41]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb7c7a4d3]
/home/ezequiel/Escritorio/SDL/Barajas/Juego[0x8048b91]
======= Memory map: ========
08048000-0804b000 r-xp 00000000 08:01 276286 /home/ezequiel/Escritorio/SDL/Barajas/Juego
0804b000-0804c000 r--p 00002000 08:01 276286 /home/ezequiel/Escritorio/SDL/Barajas/Juego
0804c000-0804d000 rw-p 00003000 08:01 276286 /home/ezequiel/Escritorio/SDL/Barajas/Juego
0804d000-080dc000 rw-p 00000000 00:00 0 [heap]
b65a6000-b6c54000 rw-p 00000000 00:00 0
b6c54000-b6d92000 rw-s 00000000 00:04 16318476 /SYSV00000000 (deleted)
b6d92000-b6de9000 rw-p 00000000 00:00 0
b6e81000-b6e86000 r-xp 00000000 08:01 265349 /usr/lib/i386-linux-gnu/libXfixes.so.3.1.0
b6e86000-b6e87000 r--p 00004000 08:01 265349 /usr/lib/i386-linux-gnu/libXfixes.so.3.1.0
b6e87000-b6e88000 rw-p 00005000 08:01 265349 /usr/lib/i386-linux-gnu/libXfixes.so.3.1.0
b6e88000-b6e90000 r-xp 00000000 08:01 265367 /usr/lib/i386-linux-gnu/libXrender.so.1.3.0
b6e90000-b6e91000 r--p 00007000 08:01 265367 /usr/lib/i386-linux-gnu/libXrender.so.1.3.0
b6e91000-b6e92000 rw-p 00008000 08:01 265367 /usr/lib/i386-linux-gnu/libXrender.so.1.3.0
b6e92000-b6e9b000 r-xp 00000000 08:01 265341 /usr/lib/i386-linux-gnu/libXcursor.so.1.0.2
b6e9b000-b6e9c000 r--p 00008000 08:01 265341 /usr/lib/i386-linux-gnu/libXcursor.so.1.0.2
b6e9c000-b6e9d000 rw-p 00009000 08:01 265341 /usr/lib/i386-linux-gnu/libXcursor.so.1.0.2
b6eae000-b6eaf000 r--p 00fd4000 08:01 267231 /usr/lib/locale/locale-archive
b6eaf000-b6fe0000 r--p 00d6c000 08:01 267231 /usr/lib/locale/locale-archive
b6fe0000-b701f000 r--p 002fc000 08:01 267231 /usr/lib/locale/locale-archive
b701f000-b721f000 r--p 00000000 08:01 267231 /usr/lib/locale/locale-archive
b721f000-b7223000 rw-p 00000000 00:00 0
b7223000-b7236000 r-xp 00000000 08:01 131318 /lib/i386-linux-gnu/libresolv-2.15.so
b7236000-b7237000 r--p 00013000 08:01 131318 /lib/i386-linux-gnu/libresolv-2.15.so
b7237000-b7238000 rw-p 00014000 08:01 131318 /lib/i386-linux-gnu/libresolv-2.15.so
b7238000-b723a000 rw-p 00000000 00:00 0
b723a000-b7240000 r-xp 00000000 08:01 265803 /usr/lib/i386-linux-gnu/libogg.so.0.8.0
b7240000-b7241000 r--p 00005000 08:01 265803 /usr/lib/i386-linux-gnu/libogg.so.0.8.0
b7241000-b7242000 rw-p 00006000 08:01 265803 /usr/lib/i386-linux-gnu/libogg.so.0.8.0
b7242000-b726b000 r-xp 00000000 08:01 265968 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
b726b000-b726c000 ---p 00029000 08:01 265968 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
b726c000-b726d000 r--p 00029000 08:01 265968 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
b726d000-b726e000 rw-p 0002a000 08:01 265968 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
b726e000-b73d4000 r-xp 00000000 08:01 265970 /usr/lib/i386-linux-gnu/libvorbisenc.so.2.0.8
b73d4000-b73e5000 r--p 00165000 08:01 265970 /usr/lib/i386-linux-gnu/libvorbisenc.so.2.0.8
b73e5000-b73e6000 rw-p 00176000 08:01 265970 /usr/lib/i386-linux-gnu/libvorbisenc.so.2.0.8
b73e6000-b73e7000 rw-p 00000000 00:00 0
b73e7000-b7435000 r-xp 00000000 08:01 265311 /usr/lib/i386-linux-gnu/libFLAC.so.8.2.0
b7435000-b7436000 r--p 0004e000 08:01 265311 /usr/lib/i386-linux-gnu/libFLAC.so.8.2.0
b7436000-b7437000 rw-p 0004f000 08:01 265311 /usr/lib/i386-linux-gnu/libFLAC.so.8.2.0
b7437000-b744d000 r-xp 00000000 08:01 131275 /lib/i386-linux-gnu/libnsl-2.15.so
b744d000-b744e000 r--p 00015000 08:01 131275 /lib/i386-linux-gnu/libnsl-2.15.so
b744e000-b744f000 rw-p 00016000 08:01 131275 /lib/i386-linux-gnu/libnsl-2.15.so
b744f000-b7451000 rw-p 00000000 00:00 0
b7451000-b7456000 r-xp 00000000 08:01 265345 /usr/lib/i386-linux-gnu/libXdmcp.so.6.0.0
b7456000-b7457000 r--p 00004000 08:01 265345 /usr/lib/i386-linux-gnu/libXdmcp.so.6.0.0
b7457000-b7458000 rw-p 00005000 08:01 265345 /usr/lib/i386-linux-gnu/libXdmcp.so.6.0.0
b7458000-b745a000 r-xp 00000000 08:01 265334 /usr/lib/i386-linux-gnu/libXau.so.6.0.0
b745a000-b745b000 r--p 00001000 08:01 265334 /usr/lib/i386-linux-gnu/libXau.so.6.0.0
b745b000-b745c000 rw-p 00002000 08:01 265334 /usr/lib/i386-linux-gnu/libXau.so.6.0.0
b745c000-b7461000 r-xp 00000000 08:01 265398 /usr/lib/i386-linux-gnu/libasyncns.so.0.3.1
b7461000-b7462000 r--p 00004000 08:01 265398 /usr/lib/i386-linux-gnu/libasyncns.so.0.3.1
b7462000-b7463000 rw-p 00005000 08:01 265398 /usr/lib/i386-linux-gnu/libasyncns.so.0.3.1
b7463000-b7464000 rw-p 00000000 00:00 0
b7464000-b74d1000 r-xp 00000000 08:01 265894 /usr/lib/i386-linux-gnu/libsndfile.so.1.0.25
b74d1000-b74d3000 r--p 0006c000 08:01 265894 /usr/lib/i386-linux-gnu/libsndfile.so.1.0.25
b74d3000-b74d4000 rw-p 0006e000 08:01 265894 /usr/lib/i386-linux-gnu/libsndfile.so.1.0.25
b74d4000-b74d8000 rw-p 00000000 00:00 0
b74d8000-b74e0000 r-xp 00000000 08:01 131347 /lib/i386-linux-gnu/libwrap.so.0.7.6
b74e0000-b74e1000 r--p 00007000 08:01 131347 /lib/i386-linux-gnu/libwrap.so.0.7.6
b74e1000-b74e2000 rw-p 00008000 08:01 131347 /lib/i386-linux-gnu/libwrap.so.0.7.6
b74e2000-b74ed000 r-xp 00000000 08:01 265735 /usr/lib/i386-linux-gnu/libjbig.so.0.0.0
b74ed000-b74ee000 r--p 0000a000 08:01 265735 /usr/lib/i386-linux-gnu/libjbig.so.0.0.0
b74ee000-b74f1000 rw-p 0000b000 08:01 265735 /usr/lib/i386-linux-gnu/libjbig.so.0.0.0
Program received signal SIGABRT, Aborted.
0xb7fdd424 in __kernel_vsyscall ()


Juego: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.

Program received signal SIGABRT, Aborted.
0xb7fdd424 in __kernel_vsyscall ()


Creo que son todos, no entiendo mucho los errores en C++ pero creo que es un problema con malloc.
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay

Re: Aborta sin motivos

Notapor Barajas » Mié Feb 20, 2013 7:46 am

Dudo que sea un defecto de la Magallanes, creo que el problema reside en como es creada la memoria para la cadena e insisto en que es mejor usar el método c++ en lugar del de c, que mencione antes.

También este es una de esos momentos en que se considera que seria mejor rescribir el programa desde 0.

De cualquier manera, el fin de semana probablemente te paso una versión con la memoria creada a la manera c++, y presento unas pequeñas utilidades que he estado haciendo.
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Aborta sin motivos

Notapor Ezequiel Pereira » Mié Feb 20, 2013 2:50 pm

Logre arreglarlo, cambie lines a una simple cadena de texto y le asigné el texto con strdup.
Al destructor le agregué:
free(lines);

Y saqué algunos comentarios viejos e inútiles

Así quedo el programa.

Gracias Barajas por tu ayuda, aprendí varias cosas gracias a vos :D.
Avatar de Usuario
Ezequiel Pereira
 
Mensajes: 21
Registrado: Vie Dic 28, 2012 1:51 am
Ubicación: Montevideo, Uruguay


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados