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