Bonjour à tous et merci d'avance pour votre aide!
Etant en train de coder un petit jeu en C++, avec l'aide de la SFML, je suis tombé sur un gros problème de map (stl) : Cette map, appartenant au moteur graphique, fais le lien entre l'id d'une image (int), et son emplacement en mémoire (sf::Image). A là compilation, pas de problème, mais, lors du runtime, le programme s'arrête subitement, et me retourne :
Process returned -1073741819 (0xC0000005)
, sur cette ligne :
// on charge l'image dans la map
m_liste_images[idImage] = sf::Image();
La déclaration de la map dans le .h est la suivante :
// liste des Images
std::map<int, sf::Image> m_liste_images;
Merci d'avance pour votre aide!
EDIT : Je peux préciser, que, pour cerner l'erreur, j'ai essayé les exceptions : rien, j'ai essayé de changer les type de la map : rien... je sui compplètement paumé...
Alors tout d'abord, vérifie que la map est bien initialisée.
Ensuite, je soupçonne un probleme grave :
Il est possible que tu utilises uen lib release, et que tu programmes en debug, ou vice versa
Et si il y a une map dans un .h -> donc déja implémentée ET compilée dans la lib, et que tu peux y utiliser de l'extérieur, alors tu risques un crash.
En effet, en debug et en release, sous certaines implémentations (visual C++ 2005 pour ne pas la citer), sizeof(std::map<>) est différente en debug et en release...
Du coup, au boulot, on a eu des emmerdes monstres a cause de ça, (car on fait beaucoup de libs pour nos clients) et on a décidé de ne plus fournir de maps aux clients : on en utilise en interne, mais on ne les passe jamais au client.
Je ne sais pas si SFML a ce bug, mais, a ce jour, si c'est bien celui ci, il n'y a pas d'autres solutions que de faire un projet release avec une lib release, et un projet debug avec une lib debug, le croisement provoquant des problemes graves.
Cela dit, ça m'étonne que SFML aie fait cette erreur la, et surtout que tu sois le premier a en souffrir.
Merci pour ta réponse, mais je n'en suis pas si sûr : tout d'abord, je suis sous Code::Block, et de plus, je n'ai pas inversé debug/release (si j'ai bien compris ton avertissement...).
J'ai tout de même essayé de recompilé en debug, puis en release, mais toujours le même problème de runtime...
Là, je suis carrément perdu...
Edit : Est-ce possible que celà vienne de la SFML?
merci d'avance!
Oui, tu as peut etre fait un débordement avant : dans ce cas la, le programme fini par faire n'importe quoi, et plante a un endroit improbable.
Essaie de réduire au maximum (en commentant) tout ton code, pour resserrer sur l'erreur.
Moi ce qui m'intrigue, c'est l'adresse de plantage : c'est une adresse de plantage qu'on a habituellement quand on essaie d'écrire sur NULL. Es tu sur que ta map est créée ? Es tu sur qu'il n'y a pas un Init_SFML() ou Init_context() ou une fonction du genre que tu n'as pas appelé avant ?
Essaie de trouver des tutos fiables sur le net qui se servent de cette map, et essaie de voir s'ils marchent chez toi, puis pars de ces tutos, et compare les avec ce que tu as.
J'ai remplacé la sf::Image par un int : même résultat, l'erreur ne vient donc pas de la SFML, non?
Ma map, je crois, est créée, car je l'ai déclarée comme étant attribut du moteur graphique.
Il n'y a pas de sfml_init(), ou de fonctions similaires.
La valeur de idImage est normale avant l'erreur (soit 10012)
Je vais essayer de resserer le code, merci de votre aide!
Edit : j'ai placé ce code là au début du main, et il fonctionne sans erreur.
std::map<int, int> maMap;
maMap[10012] = 3;
std::cout << maMap[10012];
J'ai placé cet autre code dans le constructeur du moteur graphique : il n'y a pas d'erreur, c'est donc peut-être une fuite... comment faire pour la repérer dans un projet qui compte pas mal de fichiers et de lignes de codes?
Une erreur que j'ai vue (affreuse), je ne pense pas que ça aie de rapport, mais dans le doute :
Des gars fesaient des structures dans lesquelles ils mettaient des map.
Puis, il manipulaient des pointeurs sur les structures.
Et pour aller la structure --> malloc !!!! (et la c'est le drame, malloc n'appelle pas récursivement les constructeurs internes aux structures, contrairement a new)
D'ou des plantages sur map a la premiere utilisation de celle ci...
EDIT : je suis vraiment désolé pour ceux qui ont pris le temps de lire le code que j'avais posté, mais le problème venait finalement de l'utilisation d'un pointeur qui n'existait pas...
Merci beaucoup pour votre aide!
STL : problème avec les map
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html