嵌套链表出现Segmentation Fault:11错误,请求排查代码问题
Segmentation Fault:11 错误原因分析
核心触发点
- 你的主链表头节点
head为NULL,调用insertWord时:node *trav = head让trav初始化为NULL- 循环
while (trav != NULL && trav->data != alpha)因为trav是NULL,循环直接跳过 - 后续执行
trav->innernode = newnode,此时trav还是NULL,访问空指针的成员会直接触发Segmentation Fault:11
其他潜在问题
node2类声明了默认构造函数node2();但没有实现,后续如果有默认构造node2对象的操作会引发编译/运行错误- 内部链表插入逻辑错误:当前代码直接把
innernode覆盖成新节点,没有处理原有内部链表的追加逻辑(应该找到内部链表的尾节点再插入,而不是直接替换)
修复建议
- 先确保主链表中存在对应字母的节点,再进行内部单词插入:
void insertWord(string word, string meaning) { char alpha = word[0]; node *trav = head; // 先查找对应字母的节点,不存在则创建 while (trav != NULL && trav->data != alpha) { trav = trav->next; } if (trav == NULL) { // 创建新的字母节点并加入主链表(这里需要补充主链表的插入逻辑,比如头插或尾插) trav = new node(alpha); // 假设是头插主链表,根据实际需求调整 trav->next = head; head = trav; } // 插入内部链表(追加到尾部) node2* newnode = new node2(word, meaning); if (trav->innernode == NULL) { trav->innernode = newnode; } else { node2* innerTrav = trav->innernode; while (innerTrav->next != NULL) { innerTrav = innerTrav->next; } innerTrav->next = newnode; } } - 实现
node2的默认构造函数,比如:node2::node2() : Word(""), Meaning(""), next(NULL) {}
内容的提问来源于stack exchange,提问作者Sabeer Faisal
相关产品推荐
相关产品推荐

