我刚开始编程并有一个问题:我想在trie树中插入大量的单词。然后遍历树并释放所有节点,以便我可以再次插入这些单词。但是当单词的数量很大(比如100万)时,我遇到了堆缓冲区溢出,这些函数适用于少量单词:
这是节点
struct node
{
struct node * parent;
int noempty;
int isword;
int super;
int occurrence;
int leaf;
struct node * child[26];
};
插入功能:
struct node* insert(struct node *root,char *c)
{
int i=0;
struct node *temp=root;
int l=length(c);
while(i!=l)
{
int index=c[i]-'a';
if(temp->child[index]==NULL)
{
//New Node
struct node *n=malloc(sizeof(struct node));
n->parent=temp;
temp->child[index]=n;
temp->noempty=1;
}
//Node Exist
if(i!=l&&temp->leaf==1)
{
temp->leaf=0;
}
temp=temp->child[index];
i++;
}
if(temp->noempty==0)
{
temp->leaf=1;
}
temp->isword=1;
return root;
};
自由功能:
void freetree(struct node* curs)
{
int i;
if(!curs)
return;
for (i = 0; i !=26; i++)
freetree(curs->child[i]);
free(curs);
}
谢谢!
答案 0 :(得分:0)
检查malloc
功能的返回。如果它为NULL,则表示您已达到此进程的最大堆内存,因此malloc
无法为您分配额外的内存。