Erreur de segmentation(core dumped) - SDL2 - c++
Bonjour,
J'utilise la SDL2, lors de l'écriture du programme, j'ai souvent compilé pour voir si tout allait bien. Je refermais la fenêtre aussitôt. Le but étant de voir si les textures s'affichaient correctement.
J'ai donc continué à coder, et maintenant que j'ai ajouté des tuiles, Lors de l'exécution, j'ai une erreur de segmentation au bout de quelques secondes...
Je pense que j'avais déjà cette erreur depuis le début du programme, mais que je ne l'ai pas vue car je ne laissais pas la fenêtre ouverte assez longtemps.
En regardant les forums, j'ai vu que je pouvais compiler avec -g3 ou -w avec make, et déboguer avec gdb.
mais quand je fais ça, gdb me donne cela :
Citation:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff480a700 (LWP 9154)]
Thread 1 "exe" received signal SIGSEGV, Segmentation fault.
0x00007ffff4fe4540 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
je n'avais utilisé gdb, mais je pense que le "??" est censé me donner l'endroit ou a lieu l'erreur.
Avez-vous d'autre idées qui pourrait m'aider à trouver le lieu de l'erreur ?
Si vous avez déjà utilisé la SDL2, savez-vous quelle type de structure faut-il libérer ? (Je me dis que c'est peut-être un SDL_FreeSurface() qui manque, ou un pointeur qui ne pointe sur rien... )
je vous fournis l'extrait de code qui, je pense, cause l'erreur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| void map::display( fenetre* window , int i , int j )
{
SDL_Rect rect_src;
SDL_Rect rect_dest;
SDL_Surface* loading_surf = SDL_LoadBMP( this->tuile_set->get_name().c_str() );
if( loading_surf == NULL )
{
std::cout << "Erreur lors du chargement de l'image" << std::endl;
}
SDL_Texture* texture ;
rect_src.x = ( (this->tab_map[j][i]) % this->tuile_set->get_nb_colone() ) * this->tuile_set->get_largeur_tuile();
rect_src.y = ( (this->tab_map[j][i]) % this->tuile_set->get_nb_ligne() ) * this->tuile_set->get_hauteur_tuile();
rect_src.w = this->tuile_set->get_largeur_tuile();
rect_src.h = this->tuile_set->get_hauteur_tuile();
rect_dest.x = i * this->tuile_set->get_largeur_tuile();
rect_dest.y = j * this->tuile_set->get_hauteur_tuile();
rect_dest.w = this->tuile_set->get_largeur_tuile();
rect_dest.h = this->tuile_set->get_hauteur_tuile();
texture = SDL_CreateTextureFromSurface( window->get_renderer() , loading_surf );
SDL_FreeSurface( loading_surf );
SDL_RenderCopy( window->get_renderer() , texture , &rect_src , &rect_dest );
}; |
j'ai aussi testé valgrind pour voir si il y avait une fuite de mémoire, j'ai beaucoup trop d'erreurs pour les montrer, mais elles sont quasiment toutes identiques :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| ==17195== Invalid write of size 4
==17195== at 0x7A319F7: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7A0F7D7: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7AD7727: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7A11D8A: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7AB184D: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x722BABD: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0)
==17195== by 0x7105F22: ??? (in /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0)
==17195== by 0x71075A0: ??? (in /usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0)
==17195== by 0x4942849: ??? (in /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.10.0)
==17195== by 0x4914739: ??? (in /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.10.0)
==17195== by 0x4916977: ??? (in /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.10.0)
==17195== by 0x4917112: ??? (in /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.10.0)
==17195== Address 0x7f0581ef609c is not stack'd, malloc'd or (recently) free'd
==17195==
==17195== 2984 errors in context 72 of 276:
==17195== Invalid write of size 4
==17195== at 0x7F1E996: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x8099AA2: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7A0B22C: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7A39E58: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7A3A3AB: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7A0F694: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x7A4170A: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
==17195== by 0x724CE46: ???
==17195== by 0x4943306: ??? (in /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0.10.0)
==17195== by 0x10B27A: main (main.cpp:52)
==17195== Address 0x7f0581ef21c4 is not stack'd, malloc'd or (recently) free'd
==17195== |
pour information, dans main.cpp ligne 52 il y a :
Code:
SDL_RenderPresent( window->get_renderer() );
prototype de la fonction :
Code:
1 2 3 4
| SDL_Renderer* fenetre::get_renderer()
{
return this->m_renderer;
}; |
merci pour votre temps.
Cordialement.