gpt4 book ai didi

c++ - 作为结构内部字段的映射的初始化值?

转载 作者:行者123 更新时间:2023-11-30 05:13:17 31 4
gpt4 key购买 nike

当我尝试向我的 map (名为子项)插入一个值时,它会出现段错误。我无法理解我的方法到底有什么问题(评论和未评论的方法)。

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

最佳答案

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


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

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

关于c++ - 作为结构内部字段的映射的初始化值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44006648/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com