初始化地图的值,该地图是结构内的一个字段?

时间:2017-05-16 16:16:36

标签: c++ data-structures stl initialization structure

当我尝试向我的地图(名为child)插入一个值时,它会给出分段错误。我无法理解我的方法究竟是什么问题(注释和非注释)。

struct trienode{
    map < char , struct trienode* > child;
    bool eow;
}; typedef struct trienode trienode;

void insert_trie(trienode* root,string mystr){

    int len = mystr.length();
    int p=0;
    char ch=mystr.at(p);
    trienode* temp=root;
    while(p<len){
        map<char, trienode* >::iterator itr=(temp->child).find(ch);

        if( itr!=(temp->child).end()){
            temp=itr->second;
            p++;
            ch=mystr.at(p);
        }
        else{
            trienode* temp2;
            temp2=(trienode*)malloc(sizeof(trienode));
            temp->child.insert(make_pair(ch,temp2));//segmentation fault occure on this line or line below it.
            //(temp->child)[ch]=temp2;
            if(p==len-1){
                temp2->eow=true;
            }
            else{
                temp2->eow= false;
                temp=temp2;
            }
            p++;
            ch=mystr.at(p);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您需要使用new,而不是malloc。否则std::map将不会被初始化。并且段错误可能发生在std::map的复制构造函数中。

  • 您可以std::map<char,trienode>使用child并避免所有这些错误。

  • std::map::operator[]为您插入项目,如果您确保trienode::eow初始化为false,则可以依赖它。