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

调试器指向教授提供的函数定义时,段错误根源在哪?

问题分析与解答

核心结论

这个段错误主要是教授提供的函数定义本身的问题,你的调用代码大概率没有问题,具体原因如下:

  • 无限递归导致栈溢出
    你贴出的函数代码存在致命逻辑错误:

    static LexItem GetNextToken(istream& in, int& line) {
        if( pushed_back ) {
            pushed_back = false;
            return pushed_token;
        }
        return GetNextToken(in, line); // 无限递归调用自身
    }
    

    当全局/静态变量pushed_back为false时,函数会无终止地递归调用自己,每次递归都会占用栈空间,最终栈空间耗尽,触发操作系统抛出的SIGSEGV段错误——这和你gdb里显示错误发生在return GetNextToken(in, line);行完全吻合。

  • 依赖的全局变量未正确初始化
    这个函数依赖pushed_back和pushed_token两个全局/静态变量,如果这些变量没有被正确初始化(比如pushed_back默认就是false,或者pushed_token是未构造的无效对象),会直接触发上面的无限递归逻辑。

  • 调用方参数无明显问题
    从gdb输出line=@0x63fef0: 1可以看出,line的内存地址有效,值也正常;istream& in的引用也没有明显异常,所以你这边的调用参数大概率不是问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:55:33