2010-11-25 9 views
0

J'ai un problème étrange avec un conteneur STL.STL Container en tant que membre privé. Erreur de segmentation

J'ai un cours avec un membre privé std::map<string, string> _environment. Pourquoi quand j'appelle _environment["name"]="john" dans le constructeur de classe (ou n'importe où), j'obtiens un Segmentation fault?

Ce devrait être l'utilisation la plus courante d'un conteneur STL, n'est-ce pas?

Merci!

Edit (plus de code):

Dans shell.h:

#include <string> 
#include <map> 

using namespace std; 

class Shell { 
    public: 
     Shell(); 
     Shell(const Shell& orig){}; 
     virtual ~Shell(){}; 

    private: 
     ... 
     ... 
     std::map<string, string> _environment; 
}; 

Dans shell.cpp:

Shell::Shell() {  
    _environment["shell"] = "myshell";  
    ... 
} 

L'erreur de segmentation se produit dans la ligne _environment["shell"] = "myshell";

+15

Veuillez poster un exemple de code, ce que vous décrivez devrait bien sûr fonctionner correctement. – Jon

+1

Avez-vous essayé d'utiliser votre débogueur pour savoir exactement où le code se bloque? – bjoernz

+2

Votre code fonctionne pour moi, y a-t-il quelque chose de significatif dénoté par le '...'? Sinon, vous devrez peut-être déboguer, je ne pense pas que vous manquiez de mémoire, mais ... qui sait? – birryree

Répondre

0

Il n'y a pas de raison pour une erreur de segmentation. Et pour encartage Simplify Je recommande d'utiliser la bibliothèque boost :: assign, comme ceci:

Shell::Shell() { 
    using namespace boost::assign; 
    insert(_environment)("shell", "myshell");  
    ... 
} 

Ceci est plus élégante et plus efficacement.

Questions connexes