我用来向列表中添加新节点的函数,不断收到错误"分段错误(核心转储)",我觉得在某些时候我错误地引用了列表
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;
}
}
}
答案 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);