2009-06-24 7 views
4

Je suis en train de hacker un éditeur pour un jeu sur lequel je travaille et dans le cadre de cet éditeur, j'ai besoin de textures, évidemment. J'ai créé un std :: variable carte comme si,Erreur d'exécution std :: map inhabituelle

std::map<std::string, unsigned int> textures; 

Dans mon image code de chargement, je l'extrait suivant.

unsigned int id; 
glGenTextures(1, &id); 
glBindTexture(GL_TEXTURE_2D, id); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 
glBindTexture(GL_TEXTURE_2D, 0); 

textures[filename] = id; 

Maintenant, pour une raison quelconque, j'obtiens une erreur d'exécution après avoir tenté d'utiliser le code ci-dessus. Une erreur de violation d'accès, que, lorsque débogué, me pointe vers le code std :: carte elle-même, plus précisément, cette partie:

_Nodeptr _Lbound(const key_type& _Keyval) const 
    { // find leftmost node not less than _Keyval 
    _Nodeptr _Pnode = _Root(); // ** this is the highlighted line ** 
    _Nodeptr _Wherenode = _Myhead; // end() if search fails 

    while (!_Isnil(_Pnode)) 
     if (_DEBUG_LT_PRED(this->comp, _Key(_Pnode), _Keyval)) 
      _Pnode = _Right(_Pnode); // descend right subtree 
     else 
      { // _Pnode not less than _Keyval, remember it 
      _Wherenode = _Pnode; 
      _Pnode = _Left(_Pnode); // descend left subtree 
      } 

    return (_Wherenode); // return best remembered candidate 
    } 

Je ne fait un appel à mon image fonction de chargement juste pour tester le système . J'ai vérifié les variables et les variables de nom de fichier et d'id sont correctes. Des idées quant à ce qui pourrait causer le crash de l'exécution?

+0

Il ne semble pas que vous fassiez quelque chose de mal avec la carte. Peut-être que la mémoire est corrompue ailleurs? Avez-vous essayé d'exécuter quelque chose comme valgrind sur ce code? –

+0

Est-ce que filename est une chaîne std :: string? – Brian

+0

@brian - ne devrait pas importer - la clé de la carte sera une copie –

Répondre

1

Il semble que la carte n'ait pas été construite correctement. L'ordre d'initialisation est probablement faux. La carte est-elle une variable statique ou globale? Votre code fait-il partie d'un objet statique?

+0

La carte est un objet global et la fonction est également globale. –

+0

Peu importe que la fonction soit globale ou non, il est important de savoir qui l'appelle. Est-il appelé depuis le constructeur d'un objet global? –