c - 如何修复链表分段错误 C
问题描述
我正在尝试在以下代码中解决“分段错误”的问题,我可能认为我没有得到全貌,这就是为什么我不断获得分段错误而不是分段错误,任何有助于深入理解这一点,会鼓励我发展自我分析。
代码应该很简单:给定两个列表,我想从第一个列表中删除第二个中出现的所有元素,我的努力是:
typedef struct EL {
int info;
struct EL *next;
} ElementoLista;
typedef ElementoLista *ListaDiElementi;
void filterLists(ListaDiElementi *lista1,ListaDiElementi *lista2) {
ListaDiElementi aux = *lista1,aus = *lista2,corr;
while(aux != NULL) {
if(aux->info == aus->info) { // Erase from the first
corr = aux;
aux = aux->next;
free(corr);
}
else {
if(aus != NULL) //Increase the second
aus = aus->next;
else {
aus = *lista2; //Restart
aux = aux->next;
}
}
}
}
解决方案
您的代码有几个问题:
当第二个列表比另一个短时,您会得到一个段错误,因为您没有
aus
在第一个 if 语句中检查是否为 NULL。如果第一个列表中间的元素被删除,稍后您会得到另一个段错误,因为被删除元素的前身仍然指向原始元素,但释放了内存。
我不知道这是否是一个问题,但您的算法似乎只适用于排序列表,请查看这两个列表,例如 [1,2] 和 [2,1]。
为了帮助您使用算法,我们需要知道您喜欢如何处理重复元素以及列表是否已排序。
推荐阅读
- c# - 在 FPS 中旋转角色和相机
- angular - “在“@angular/platform-browser”中找不到导出“文档”
- react-native-android - 反应本机中的复选框
- javascript - 递增和递减计数器未正确设置状态
- python - 在使用 python 登录之前将应用程序作为服务启动
- gatsby - Gatsby-image 显示大于设置的 maxWidth 属性
- git - GitHub 未显示对启用以包含在个人资料中的私有存储库的贡献
- java - 创建带有 for 循环问题的动态按钮(Android、JAVA)
- node.js - 如何确保至少一个字段不为空?(如果只有一个不为空就可以)
- batch-file - CMD 或批处理命令读取串行 COM