结构的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
在语义上表示“无指针”,所以它自然是“错误的”。。。但这是品味的问题。