You need to enable JavaScript to run this app. CLion运行C++链表树程序调用函数即报exit code139(SIGSEGV)错误
优惠活动
大模型
产品
解决方案
定价
更多

CLion运行C++链表树程序调用函数即报exit code139(SIGSEGV)错误

报错根因

C++全局作用域声明的指针变量,会被默认零初始化,也就是说你定义的Tree *root;和Tree *temp;,初始值都是nullptr,没有指向任何合法的Tree对象内存。
你写的所有自定义函数,都没有做指针有效性校验就直接解引用空指针:

  • add函数直接执行root->data = c,相当于尝试往内存地址0的位置写数据,属于非法内存访问,直接触发SIGSEGV信号,表现为exit code 139
  • addR、addL函数虽然会为新节点申请堆内存,但最后一步要执行root->right = temp/root->left = temp,同样是解引用空的root指针,哪怕新节点的内存申请成功,这行操作一样会触发段错误
    你说移除add('a')程序就正常,是因为这时候main函数只执行了打印2的逻辑,全程没有触碰无效指针,自然不会触发内存违规。
最小修复方案

在第一次操作root之前,必须先为其申请合法内存,不能直接拿空指针访问成员:

void add(char c)
{
    // 若root为空,先创建根节点
    if (root == nullptr) {
        root = new Tree();
    }
    root->data = c;
}

注意事项:

  • 后续调用addR、addL之前,必须保证root已经指向合法的树节点,否则这两个函数里的root->xxx操作依然会触发段错误
  • 目前用全局变量存树节点和临时遍历指针的写法,后续实现括号表达式解析转树的逻辑时,很容易出现指针覆盖、内存泄漏的问题,建议后续把树结构的指针封装为类的私有成员,减少全局变量的依赖

内容的提问来源于stack exchange,提问作者Mohammad javad。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 07:36:03