不同机器上的分段故障11行为

时间:2015-11-03 02:42:10

标签: c++ segmentation-fault

我在C ++中运行了一个深度优先的搜索程序,用于非常大的图形。 dfs以递归方式编写。我的笔记本电脑上出现了分段故障11,但无法找到任何错误。然后我在linux服务器上运行它,运行正常。

我很好奇有什么区别。我怀疑堆栈大小,因为程序是递归的,但是当我检查:ulimit -a时,两台计算机的堆栈大小都是8192 kB。我无法找到可能导致此问题的其他限制。你知道我为什么会有所不同吗?谢谢!

1 个答案:

答案 0 :(得分:0)

“分段错误”只是正式定义为“未定义行为”的可能结果之一。

分段错误的存在通常可以得出结论性证据表明应用程序以某种方式参与“未定义的行为”。

它被称为“未定义行为”的原因恰恰是:未定义应用程序的行为。实际行为可能取决于处理器,架构,一天中的时间,月亮的阶段,或者谁赢得了世界大赛。有时应用程序会因分段错误而崩溃。其他时候它可能会运行到最后,显然会产生预期的结果,或者可能产生微妙错误的结果,这是不可检测的行为。您不能指望程序中存在任何特定行为,因为它未定义。

这就是“未定义的行为”的含义。 “未定义行为”的一个更好的已知同义词是“bug”。