【问题标题】:Possible reasons for segmentation fault on function exit函数退出时出现分段错误的可能原因
【发布时间】:2011-10-22 16:15:02
【问题描述】:

你能想到在 C++ 中退出函数时出现分段错误的可能原因是什么?我的意思是,我在 C++ 程序中有一个可重现的分段错误,当我使用 GDB 进行调查时说

 Program received signal SIGSEGV, Segmentation fault.
 FooBar (bla=...) at foo.cpp:59
 59     }

其中指示的行包含我的函数的右括号。

【问题讨论】:

  • 检查大括号范围内任何变量的析构函数。
  • 那些不会“出现”在 GDB 中?

标签: c++ debugging gdb segmentation-fault


【解决方案1】:

在我的例子中,我有一个没有正确连接的 std::thread。

【讨论】:

    【解决方案2】:

    这可能有很多原因。在 Valgrind 下运行程序,它很可能会告诉你确切的原因,或者至少有助于调查和缩小问题范围。

    【讨论】:

    • Valgrind 成功了……不过,因为它访问了一个不存在的向量位置。我原以为 GDB 会为我缩小范围……?!
    【解决方案3】:

    我的第一个猜测是类的析构函数正在释放一个无效指针。

    【讨论】:

      【解决方案4】:

      这很可能是位于堆栈上的某个缓冲区上的buffer overrun。这会覆盖返回地址,因此当您的代码尝试返回上一个堆栈帧时,它会跳转到一些随机地址,该地址很可能不是不可执行的,因此您会遇到分段错误。

      但如果没有看到更多代码或有关崩溃的更多信息,就不可能说出确切的原因是什么。

      【讨论】:

        猜你喜欢
        • 2012-08-09
        • 2017-02-21
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 2015-09-20
        相关资源
        最近更新 更多