我正在一个大项目中工作,我在下面的场景中遇到了分段错误。如果有人能说出问题的可能原因,那就太棒了。感谢。
我有两个结构,
struct HashElt
{
char* url;
float pageRank;
char* token;
struct HashElt* next;
};
struct HTable
{
struct HashElt* table[2000];
};
HTable中的表变量包含HashElt结构,它是链表中的节点。当我尝试将新的HashElt链接到表变量中已存在的HashElt时,我遇到了分段错误。
if(table->table[i] == NULL)
table->table[i] = elt;
else
{ struct HashElt* currElt;
currElt = table->table[i];
while(currElt != NULL)
{ if(currElt == elt) return;
currElt = currElt->next;
}
currElt->next = elt;
}
我在这一行得到了分段错误,currElt-> next = elt; 提前谢谢。
答案 0 :(得分:2)
看看你的错误,你的while循环会在currElt
为NULL
时中断,而currElt->next = elt;
语句相当于NULL->next = elt
,这意味着你正在使用NULL指针接下来访问它的值,这就是你获得分段违规的原因。
while(currElt != NULL)
{
if(currElt == elt) return;
currElt = currElt->next;
}
currElt->next = elt;
}
所以改变它如下所示,这里循环将在currElt
指向最后一个节点时中断,因此它在这里不为空。
while(currElt->next != NULL)
{
if(currElt == elt) return;
currElt = currElt->next;
}
if(currElt == elt) return;
currElt->next = elt;
}