结构的C分段错误数组
我在一个大项目中工作,我在下面的场景中遇到了分段错误。如果有人能说出问题的可能原因,那就太好了。谢谢 我有两个结构结构的C分段错误数组,c,linked-list,segmentation-fault,hashtable,C,Linked List,Segmentation Fault,Hashtable,我在一个大项目中工作,我在下面的场景中遇到了分段错误。如果有人能说出问题的可能原因,那就太好了。谢谢 我有两个结构 struct HashElt { char* url; float pageRank; char* token; struct HashElt* next; }; struct HTable { struct HashElt* table[2000]; }; HTable中的table变量包含HashElt struct,它是链表中的一个节点。当我试图将一
struct HashElt
{
char* url;
float pageRank;
char* token;
struct HashElt* next;
};
struct HTable
{
struct HashElt* table[2000];
};
HTable中的table变量包含HashElt struct,它是链表中的一个节点。当我试图将一个新的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;
提前感谢。看看你的错误,当
currElt
为NULL
并且在语句中currElt->next=elt时,你的while循环将中断
相当于NULL->next=elt
,这意味着您正在使用空指针访问其值next,这就是您获得分段冲突的原因
while(currElt != NULL)
{
if(currElt == elt) return;
currElt = currElt->next;
}
currElt->next = elt;
}
所以像下面这样更改它,这里循环将在currElt
指向最后一个节点时中断,因此它在这里不为null
while(currElt->next != NULL)
{
if(currElt == elt) return;
currElt = currElt->next;
}
if(currElt == elt) return;
currElt->next = elt;
}
while(currElt!=NULL)
->while(currElt->next!=NULL)
退出循环时while(currElt!=NULL)
currElt的值是多少?当您访问currElt->next
时会发生什么情况?说真的,您希望currElt
在while(currElt!=NULL)
之后会发生什么情况?op将自己与格式混淆了。顺便说一句,while(currElt->next)
也可以。我个人更喜欢这种风格,因为NULL
在语义上表示“无指针”,所以它自然是“错误的”。。。但这是品味的问题。