Llevo mucho usando esta librería, pero hasta hace poco no me dió por probar a alterar el modo de video en medio de la ejecución (activar pantalla completa, desactivarla, redimensionar ventana, etc...). El resultado era bueno, hasta que se colgaba xD. La cuestión es que me puse a aislar el código y finalmente a pasarle el Valgrind para detectar en que circunstancias hay fugas de memoria, y he llegado a la conclusión de que las fugas me las produce la función SDL_SetVideoMode, ni más ni menos
![toma [tomaaa]](/images/smilies/nuevos2/tomaa.gif)
Vale, quizás lo hago mal xD Por ello quiero una segunda opinión. El código simplificado sería el siguiente:
[...]
int main(int argc,char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
atexit(SDL_Quit);
SDL_Surface* main = SDL_SetVideMode(320,240,32,SDL_SWSURFACE);
SDL_QuitSubSystem(SDL_INIT_VIDEO);
SDL_InitSubSystem(SDL_INIT_VIDEO);
SDL_Surface* main = SDL_SetVideMode(320,240,32,SDL_SWSURFACE | SDL_FULLSCREEN);
return 0;
}
Y el resultado del Valgrind es este:
==7620== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 681 from 4)
==7620== malloc/free: in use at exit: 121,112 bytes in 999 blocks.
==7620== malloc/free: 27,027 allocs, 26,028 frees, 5,599,540 bytes allocated.
==7620== For counts of detected errors, rerun with: -v
==7620== searching for pointers to 999 not-freed blocks.
==7620== checked 781,128 bytes.
==7620==
==7620== LEAK SUMMARY:
==7620== definitely lost: 800 bytes in 24 blocks.
==7620== possibly lost: 0 bytes in 0 blocks.
==7620== still reachable: 120,312 bytes in 975 blocks.
==7620== suppressed: 0 bytes in 0 blocks.
Supongo que el fallo será mio, o del Valgrind, no he encontrado a nadie que se queje de esta última versión de la SDL. A ver si alguien me echa una mano...