Erreur std::string mario kart

Résolu
pillouw Messages postés 1 Date d'inscription samedi 21 janvier 2017 Statut Membre Dernière intervention 21 janvier 2017 - Modifié par cptpingu le 22/01/2017 à 15:22
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 22 janv. 2017 à 15:20
Bonjour.

Alors voilà, je suis en école d'ingénieur et on nous a demandé de créer un mini jeu vidéo. Seulement j'ai un petit problème ! En effet, lorsque je compile avec un make, par d'erreur de compilation mais lorsque j'exécute, ça me met ça:

g++ -g -Wall -Wextra -O2   -c -o main.o main.cpp
g++ main.o glutils.o mat4.o vec2.o vec3.o triangle_index.o vertex_opengl.o tga.o
mesh.o format/mesh_io_obj.o format/mesh_io_off.o -o executable -L/usr/lib -lm -lglut -lGLEW -lGLU -lGL -pthread
guillemaut@guillemaut-VirtualBox:~/Bureau/TSI/src$ ./executableterminate called after throwing an instance of 'std::string' Abandon (core dumped)

1 réponse

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 7/02/2017 à 13:54
Bonjour.

J'ai édité ton message pour virer les 10km de codes inutiles. Quand tu postes, mets du code *ciblé* et pas tes 12 000 lignes...
L'extrait que tu as mis ne pouvait pas aider :(.

Tout d'abord, pour trouver ce qui ne va pas, il faut commencer par avoir les bons réflexes:
  • Compile ton code en mode debug (tu dois avoir une règle "make debug", si ce n'est pas le cas, c'est à faire immédiatement !). La règle suppose que tu mets un -g, et pas d'optimisation (-O0). Si tu mets un -g et une optimisation, ça ne sert à rien...
  • Vu que ton code sera compilé en -g, tu vas pouvoir le débugger via gdb. Donc tu lances ton binaire avec gdb et tu attends qu'il plante.
  • Une fois ton code planté, tu tapes "bt", et là, tu vas avoir une "stack trace", qui va te dire exactement ou ton code plante (et à quelle ligne).


Au vu de l'erreur, il est clair qu'une exception non "catchée" est levée. Cette exception est lancée par la classe std::string quand on essaie de l'initialiser avec 0. Ça sent l'erreur d'initialisation d'un std::string quelque part dans ton code. Généralement, c'est de la forme: std::string toto(ma_var) ou std::string toto = ma_var, avec ma_var qui vaut le nombre 0 (ou NULL, c'est pareil).

Attention, OpenGL sous VirtualBox, j'en ai déjà fait, et ça ne se passait pas toujours très bien... J'ai déjà eu des soucis de mouvements de souris et de caméra que je n'avais pas sur un "vrai" OS (c-à-d pas virtualisé). Peut-être que les versions récentes de VirtualBox ont corrigé cela... Mais je t'invite à bien tester ton code sur un OS non virtualisé (Linux, ou Windows).


Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
Rejoignez-nous