【发布时间】:2011-02-03 18:59:51
【问题描述】:
我有一个程序,它实现了几种启发式搜索算法和几个域,旨在通过实验评估各种算法。该程序用 C++ 编写,使用 GNU 工具链构建,并在 64 位 Ubuntu 系统上运行。当我运行我的实验时,我使用 bash 的 ulimit 命令来限制进程可以使用的虚拟内存量,这样我的测试系统就不会开始交换。
某些算法/测试实例组合达到了我定义的内存限制。大多数时候,程序会抛出一个 std::bad_alloc 异常,该异常由默认处理程序打印,此时程序终止。有时,程序不会发生这种情况,而是会出现段错误。
为什么我的程序在内存不足时偶尔会出现段错误,而不是报告未处理的 std::bad_alloc 并终止?
【问题讨论】:
-
段错误不仅是因为你达到了内存限制
-
我很清楚。在我看到段错误的情况下,该进程一直在使用接近我指定的限制的内存量。我非常确信我看到的段错误不是由于我的代码中的错误。
-
您是否考虑过在 GDB 中简单运行(其中有几个)来查看代码的哪一部分出现段错误?
标签: c++ segmentation-fault bad-alloc