有问题让我的链表工作

时间:2016-11-15 21:44:03

标签: c

我用来向列表中添加新节点的函数,不断收到错误"分段错误(核心转储)",我觉得在某些时候我错误地引用了列表

void add(Huff ** head, Huff * current, char x)
{

int found = 0;

检查列表是否为空,将新节点设置为头

if(current == NULL)
{
    Huff * newItem = malloc(sizeof(Huff));
    newItem->c = x;
    newItem->freq = 1;

    newItem->next = NULL;
    *head = newItem;

}

检查节点是否具有相同的值

else
{   while(current != NULL)
    {
        if(current->c ==  x)
        {
            current->freq += 1;
            found = 1;
            break;  
        }   

    }

如果他们不是,请添加到列表

    if(found == 0)
    {
        Huff * newItem = malloc(sizeof(Huff));
        newItem->c = x;
        newItem->freq = 1;
        newItem->next = NULL;


        current->next = newItem;
    }   
}

}

1 个答案:

答案 0 :(得分:1)

此循环后

else
{   while(current != NULL)
    {
        if(current->c ==  x)
        {
            current->freq += 1;
            found = 1;
            break;  
        }   

    }
如果找不到合适的节点,

current可以等于NULL

此代码段中的结果

if(found == 0)
{
    Huff * newItem = malloc(sizeof(Huff));
    newItem->c = x;
    newItem->freq = 1;
    newItem->next = NULL;

    current->next = newItem;
    ^^^^^^^
}   

使用NULL指针current访问内存。

我认为你可以简化声明它的功能界面

void add( Huff ** current, char x);