结构的C分段故障数组

时间:2018-05-07 17:39:20

标签: c linked-list segmentation-fault hashtable

我正在一个大项目中工作,我在下面的场景中遇到了分段错误。如果有人能说出问题的可能原因,那就太棒了。感谢。

我有两个结构,

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; 提前谢谢。

1 个答案:

答案 0 :(得分:2)

看看你的错误,你的while循环会在currEltNULL时中断,而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;
}