C编程Trie树堆缓冲区溢出

时间:2017-03-01 19:36:01

标签: c memory tree trie

我刚开始编程并有一个问题:我想在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);
}

谢谢!

1 个答案:

答案 0 :(得分:0)

检查malloc功能的返回。如果它为NULL,则表示您已达到此进程的最大堆内存,因此malloc无法为您分配额外的内存。