我试图在c ++中实现尝试.这是我使用的结构:
typedef struct tries{
int wordCount;
int prefixCount;
map<int,struct tries*> children;
}tries;
Run Code Online (Sandbox Code Playgroud)
该初始化方法:
void initialise(tries *vertex)
{
vertex = (tries*)malloc(sizeof(tries*));
vertex->wordCount = vertex->prefixCount = 0;
for(char ch='a';ch<='z';ch++)
vertex->children[ch]=NULL;
}
Run Code Online (Sandbox Code Playgroud)
初始化方法具有分段故障在vertex->children[ch]=NULL;该故障是:
Program received signal SIGSEGV, Segmentation fault.
0x000000000040139a in std::less<int>::operator() (this=0x604018,
__x=@0x21001: <error reading variable>, __y=@0x7fffffffddb8: 97)
at /usr/include/c++/4.6/bits/stl_function.h:236
236 { return __x < __y; }
Run Code Online (Sandbox Code Playgroud)
怎么了?
malloc()如果您正在使用C++,则不应使用.此外,sizeof(tries*)如果需要创建大小为a的对象,则不应分配足够的内存来保存指针()tries.
使用new运营商:
vertex = new tries();
Run Code Online (Sandbox Code Playgroud)
或者甚至更好,根本不使用new并避免使用原始指针进行手动内存管理new,并delete.考虑使用智能指针.
此外,在C++类中有构造函数,因此该initialise()方法实际上可以替换为构造函数tries:
struct tries
{
tries() : wordCount(0), prefixCount(0)
{
// ...
}
int wordCount;
int prefixCount;
map<int, struct tries*> children;
};
Run Code Online (Sandbox Code Playgroud)