STL Container как частный участник. Ошибка сегментации - PullRequest
0 голосов
/ 25 ноября 2010

У меня странная проблема с контейнером STL.

У меня есть класс с закрытым членом std::map<string, string> _environment.Почему, когда я вызываю _environment["name"]="john" в конструкторе класса (или где-либо еще), я получаю Segmentation fault?

Это должно быть самое распространенное использование контейнера STL, не так ли?

Спасибо!

Редактировать (больше кода):

В 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;
};

В shell.cpp:

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

Ошибка сегментации происходит в строке _environment["shell"] = "myshell";

1 Ответ

0 голосов
/ 26 ноября 2010

Нет причин для ошибки сегментации.А для упрощения вставки я рекомендую использовать библиотеку boost :: assign, например:

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

Это более элегантно и эффективно.

...