我有一个程序,实现几个启发式搜索算法和几个域,旨在通过实验评估各种算法。该程序使用C++编写,使用GNU工具链构建,并在64位Ubuntu系统上运行。当我运行我的实验时,我使用bash的ulimit
命令来限制进程可以使用的虚拟内存量,以便我的测试系统不会开始交换。为什么我的程序在内存不足时偶尔会发生段错误,而不是抛出std :: bad_alloc?
某些算法/测试例组合击中我已定义的内存限制。大多数情况下,程序抛出一个std :: bad_alloc异常,该异常由默认处理程序打印,此时程序终止。偶尔,而不是发生这种情况,程序只是段错误。
为什么当内存不足,而不是报告未处理的std :: bad_alloc的和终止我的程序偶尔段错误?
段错误不仅可造成的,因为你打的内存 – Andrey 2010-04-02 16:09:29
限制,我很清楚。在我看到段错误的情况下,该过程一直在使用接近我指定限制的内存量。我非常有信心,我看到的段错误不是由于我的代码中的错误。 – 2010-04-02 16:37:57
您是否考虑过在GDB中简单运行(以及其中的几个),以查看哪些代码段错误? – Shiroko 2010-04-02 17:01:15