c - 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; 提前致谢。
解决方案
看看你的错误,你的 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;
}
推荐阅读
- arrays - 将一个数组中的对象随机替换为另一个数组。斯威夫特 4
- c# - 对话框 XAML 和 Material Design WPF
- php - 在php中声明和使用函数的正确方法
- c++ - 具有小对象优化的智能指针
- chatbot - Dialogflow 松弛卡
- python - 如何在 Brill 标记器、NLTK 中修改规则
- mongodb - 使用带有 restTemplate 的 Spring-Boot 2.0.1 从 MongoDB ISODate 字段中检索数据
- arrays - 如何在 Kotlin 中将 Set (HashSet) 转换为数组?
- python - Z3 BitVec 提取使用符号高低
- sql - 回填寄存器读取值的 SQL 查询