我有一个程序,它实现了几种启发式搜索算法和几个域,旨在通过实验评估各种算法。该程序用 C++ 编写,使用 GNU 工具链构建,并在 64 位 Ubuntu 系统上运行。当我运行我的实验时,我使用 bash 的ulimit
命令来限制进程可以使用的虚拟内存量,这样我的测试系统就不会开始交换。
某些算法/测试实例组合达到了我定义的内存限制。大多数时候,程序会抛出一个 std::bad_alloc 异常,该异常由默认处理程序打印,此时程序终止。有时,程序不会发生这种情况,而是会出现段错误。
为什么我的程序在内存不足时偶尔会出现段错误,而不是报告未处理的 std::bad_alloc 并终止?