Access violation reading location

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Lors de la compilation je n'ai aucun problème mais le programme ne ce lance pas et j'ai ceci qui s'affiche :

1
Unhandled exception at 0x6C1118F5 (msvcr120.dll) in Sims City.exe: 0xC0000005: Access violation reading location 0x064F2000.

Dans cette fonction à la ligne 4:

1
2
3
4
5
6
void TextureManager::loadTexture(const std::string& name, const std::string& filename)
{
    sf::Texture tex;
    tex.loadFromFile(filename);
    this->textures[name] = tex;
}

Voici l'appel à la fonction :

1
texmgr.loadTexture("background", "assets/background.png");

Une idée ?

Et si tu remplaces la signature de ta fonction par:

1
void TextureManager::loadTexture(const std::string& name, const std::string filename)

Autrement dit en enlevant la reference sur l'argument filename?

Édité par Ramsey

0x41414141 in ?? ()

+0 -0

Et si tu remplaces la signature de ta fonction par:

1
void TextureManager::loadTexture(const std::string& name, const std::string filename)

Autrement dit en enlevant la reference sur l'argument filename?

Ramsey

La référence est constante, ca ne peut pas être ca.

#VK comment sais tu que c'est cette fonction qui est incriminée ? Car ton message d'erreur donne des adresses. Il faudrait regarder la pile d'appel avec (c)gdb ou ddd pour savoir où ca plante exactement. A priori, tu vas tripatouiller de la mémoire qui ne t'appartient pas, ca sent le pointeur foireux/l’accès hors bornes/référence sur un objet détruit.

Édité par Davidbrcz

+0 -0
Auteur du sujet

Et si tu remplaces la signature de ta fonction par:

1
void TextureManager::loadTexture(const std::string& name, const std::string filename)

Autrement dit en enlevant la reference sur l'argument filename?

Ramsey

Idem, même erreur

@Devidbrcz J'en sais rien, mais le debugger hold sur cette ligne donc j'en conclu rien, je donne juste ce que j'ai. Du coup comment je peux faire pour savoir où ça plante ?

Tu peux essayer de donner un exemple minimal qui reproduise le soucis ? La backtrace lorsque le debugeur plante ? Tu as vérifié si texmgr contient bien un objet valide ?

Pour le comment faire, je peux pas aider, ca dépend totalement de tes outils.

+0 -0
Auteur du sujet

Un code minimal je vois pas trop comment vu que c'est un ensemble de classe qui travaille ensemble.

J'utilise VS 12 (2013)

Ok donc si je commente cette ligne :

1
texmgr.loadTexture("background", "media/background.png");

Je n'ai plus cette erreur, donc ça viens bien de ma fonction loadTexture :s

Ok avec un peu plus de recherche j'ai trouvé une réponse sur MSDN, en fait ça viens simplement du fait que j'étais en debug avec les .lib normaux et pas les -d.lib .

Bref je trouve ça plutôt stupide mais il doit y avoir une raison que je dois pas comprendre pour avoir a chaque fois le fichier en double (version débug & release).

Finalement j'ai juste modifier la config de mon projet pour bien mettre les versions débug lors du débug et release lors de la version release et tout fonctionne .

Édité par #VK

Une explication sur pourquoi mélanger debug & release c'est mauvais et un sujet sur MSDN qui en parle.

Size and the binary layout of many STL classes are different in Debug and Release builds. The classes have extra data members in debug build, for extra housekeeping and diagnostic. So, you pass a pointer from one DLL to another, but the two don't agree on how to interpret the contents of memory referred to by this pointer. Mayhem ensues.

Édité par Davidbrcz

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte