当我尝试在我的 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
的copy构造函数内部。
std::map<char,trienode>
用作child
,并避免所有这些错误。 std::map::operator[]
插入项,如果您确定trienode::eow
初始化为false,则可以依靠它。