结构的C分段错误数组

C segmentation fault array of struct

我在一个大项目中工作,在以下情况下出现分段错误。如果有人能说出问题的可能原因,那就太好了。谢谢

我有两个结构,

struct HashElt
{
  char* url;
  float pageRank;
  char* token;
  struct HashElt* next;
};

struct HTable
{
  struct HashElt* table[2000]; 
};

HTable 中的table 变量包含HashElt 结构,它是linked 列表中的一个节点。当我尝试 link 一个新的 HashElt 到 table 变量中已经存在的 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; 提前致谢。

看看你的错误,当 currEltNULL 并且在语句中 currElt->next = elt; 等同于 NULL->next = elt 时,你的 while 循环将中断,这意味着你正在使用接下来访问其值的 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;
}