You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++链表类指针解引用触发段错误及头文件嵌套包含过深问题

问题修复方案

1 解决头文件嵌套过深错误

该错误由头文件无限递归引入导致,修复步骤如下:

  • 删除LinkedList.hpp中#include "LinkedList.hpp"这行代码,头文件无需引入自身
  • 为LinkedList.hpp添加头文件防卫,避免重复包含:
    在文件最开头添加:
    #ifndef LINKED_LIST_HPP
    #define LINKED_LIST_HPP
    
    在文件最末尾添加:
    #endif
    

2 解决段错误

段错误核心原因是成员变量未初始化、空指针非法访问,具体修复点:

2.1 修复LinkedList构造函数错误

当前构造函数定义了和类成员同名的局部head变量,类的head成员未被初始化,属于野指针,同时还存在内存泄漏问题,修改为:

LinkedList::LinkedList()
{
    head = NULL;
}

2.2 修复insertEdge函数空指针访问

当前do-while循环会先执行逻辑再判断指针是否为空,当head->next为NULL时,直接解引用空指针触发崩溃,修改循环逻辑:

else if(head != NULL){
    cursor = head -> next;
    bef = head;
    // 先判断指针非空再执行操作
    while(cursor != NULL){
        if(w < cursor -> weight){
            element -> next = bef -> next;
            bef -> next = element;
            return true;
        }
        bef = cursor;
        cursor = cursor -> next;
    }
    // 遍历结束说明到达链表末尾,直接插入
    bef -> next = element;
    return true;
}

2.3 补充潜在问题修复

  • 主函数中LinkedList * adjTbl[n];是C语言变长数组语法,不属于C++标准,建议替换为vector<LinkedList*> adjTbl(n);保证兼容性
  • 主函数读取文件后直接取textVec[0]、textVec[1],建议补充文件读取成功判断、vector长度判断,避免文件为空时触发越界访问

内容的提问来源于stack exchange,提问作者Jvhkl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:06:04