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

递归函数出现Segmentation Fault的原因:两段代码对比解析

递归函数displayAllTVShowsOfActor触发Segmentation Fault的原因分析

代码1(触发Segmentation Fault)

void displayAllTVShowsOfActor(TVShow* root, string actor) {
    string *a = root->actor;
    if (root != NULL) {
        while (*a != "NULL") {
          if (*a == actor)
          {
            cout << root->name << endl; 
          }
          cout << "here";
          a = (a+1); 
        }
        displayAllTVShowsOfActor(root->left, actor);
        displayAllTVShowsOfActor(root->right, actor);
    }
} 

代码2(可正常运行)

void displayAllTVShowsOfActor(TVShow* root, string actor) {
    string *a;
    if (root != NULL) {
       a = root->actor;
        while (*a != "NULL") {
          if (*a == actor)
          {
            cout << root->name << endl; 
          }
          cout << "here";
          a = (a+1); 
        }
        displayAllTVShowsOfActor(root->left, actor);
        displayAllTVShowsOfActor(root->right, actor);
    }
}

错误原因

Segmentation Fault(段错误)的核心原因是访问了空指针指向的内存区域:

  • 代码1中,string *a = root->actor;写在if (root != NULL)判断之前。当递归遍历到二叉树的叶子节点时,root->left或root->right会是NULL,此时调用函数时root参数为空,直接执行root->actor相当于解引用空指针,这会触发内存访问违规,导致段错误。
  • 代码2把a = root->actor;移到了if (root != NULL)内部,确保只有当root不为空时才访问它的actor成员,规避了空指针解引用的问题,因此可以正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:12:41