Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Mas errores con libreria TTF de SDL

Iniciado por vib, 14 de Abril de 2013, 12:59:44 AM

« anterior - próximo »

vib

Hola buenas!
mirando el foro veo que han salido bastantes problemas con esta libreria pero ninguno se acerca a lo que me pasa ami...

Tengo un problema con la funcion
fuente = TTF_OpenFont("ariblk.ttf", 30);
TTF_CloseFont(fuente);

Nose porque me sucede lo siguiente...El caso esque he implementado una clase Texto, dentro de otra clase y veia que me daba una serie de SEGMENTION FAULTS bueno mucho averiguar he dado con la raiz, pero nose como solucionarlo!


int main()
{
vector<texto>papa;
papa.push_back(texto());
papa.clear();
papa[0]=texto();//una manera probada
papa.push_back(texto());//otra manera

return 0;
}
//contenido clase texto mas significativa
//constructo texto() contiene:
texto::texto()
{
    fuente = TTF_OpenFont("ariblk.ttf", 30);
}
//destructor  texto contiene:
texto::~texto()
{
    TTF_CloseFont(fuente);
   // delete frase;
}

Exactamente eso me pasa...
Lo que realmente quiero hacer es poner en un vector los TEXTOS que vayan a salir en pantalla, luego vacio el vector con clear, y asi infinitamente.
Con este ejemplo de hacer un push_back, clear, push_back
Me da fallo de segmentacion, estoy seguro que es por las funciones mencionadas ya que quitandolas el programa me funciona bien....
Alguna idea? ya que claro esas 2 funciones son clave para mostrar texto con TTF en SDL

Mil gracias!

julen26

Deberías usar el debugger para dar con el problema exacto. Viendo el código que has puesto diría que salta el "segmentation fault" por intentar acceder a una posición del vector que no existe (papa[0]=texto();) por el hecho de haberlo limpiado antes con clear. Simplemente usa push_back como has hecho o resize para crear elementos nuevos.

vib

Si lo hago con push_back, probe ambas y nada
Ya te digo solo ocurre si dejo las 2 funciones de TTF mencionadas...si las quito y pongo cualquier otra cosa me funciona...
He echo el debug y este es el resultado, aunque no me entero de mucho yo..

#0 0x12d422 __kernel_vsyscall() (??:??)
#1 0x3a5651 raise() (/lib/tls/i686/cmov/libc.so.6:??)
#2 0x3a8a82 abort() (/lib/tls/i686/cmov/libc.so.6:??)
#3 0x3dc49d ??() (/lib/tls/i686/cmov/libc.so.6:??)
#4 0x3e6591 ??() (/lib/tls/i686/cmov/libc.so.6:??)
#5 0x3e7de8 ??() (/lib/tls/i686/cmov/libc.so.6:??)
#6 0x3eaecd free() (/lib/tls/i686/cmov/libc.so.6:??)
#7 0x1c08b5 TTF_CloseFont() (/usr/lib/libSDL_ttf-2.0.so.0:??)
#8 0x8057bc5 texto::descargar(this=0x8180540) (/home/rayos/Escritorio/SCROLL/Libreria_scroll_COPIA_SEGURIDAD_7 (copia)/texto.cpp:39)
#9 0x8057b95 ~texto(this=0x8180540, __in_chrg=<value optimized out>) (/home/rayos/Escritorio/SCROLL/Libreria_scroll_COPIA_SEGURIDAD_7 (copia)/texto.cpp:27)
#10 0x8054e4c std::_Destroy<texto>(__pointer=0x8180540) (/usr/include/c++/4.4/bits/stl_construct.h:83)
#11 0x8054926 std::_Destroy_aux<false>::__destroy<texto*>(__first=0x8180540, __last=0x818056c) (/usr/include/c++/4.4/bits/stl_construct.h:93)
#12 0x8053e55 std::_Destroy<texto*>(__first=0x8180540, __last=0x818056c) (/usr/include/c++/4.4/bits/stl_construct.h:116)
#13 0x8052732 std::_Destroy<texto*, texto>(__first=0x8180540, __last=0x818056c) (/usr/include/c++/4.4/bits/stl_construct.h:142)
#14 0x8053b58 std::vector<texto, std::allocator<texto> >::_M_erase_at_end(this=0xbffff830, __pos=0x8180540) (/usr/include/c++/4.4/bits/stl_vector.h:1150)
#15 0x8052234 std::vector<texto, std::allocator<texto> >::clear(this=0xbffff830) (/usr/include/c++/4.4/bits/stl_vector.h:951)
#16 0x805627a main(argc=1, argv=0xbffff934) (/home/rayos/Escritorio/SCROLL/Libreria_scroll_COPIA_SEGURIDAD_7 (copia)/main.cpp:181)


vib

Solucionado.

Nose porque esta funcion
TTF_CloseFont(fuente);
no me cierra correctamente la fuente y pues me daba esos errores.. lo he corregido poniendo fuente=NULL cuando quiero hacer la descarga de dicho objeto y ya esta.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.