首页 > 解决方案 > struct的C分段错误数组

问题描述

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

我有两个结构,

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

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

HTable 中的 table 变量包含 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; 提前致谢。

标签: clinked-listsegmentation-faulthashtable

解决方案


看看你的错误,你的 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;
}

推荐阅读