我为光线跟踪应用程序实现了一个专门的树数据结构。我在每个树的节点中使用std :: list来存储数据项。我有一个问题,运行应用程序,使用这个数据结构,不仅崩溃应用程序,而且冻结整个操作系统(Windows 7)。这仅在发布模式下发生;在调试模式下,它需要更长的时间(如预期的那样),但工作正常。我正在使用Visual Studio 2010.在发布模式下运行(Ctrl + F5)或调试(F5)都会导致整个系统崩溃。
从目前为止我发现,释放和调试模式之间的不同行为似乎归因于内存泄漏,因为调试模式(从我所理解的)更宽容一些。但是我没有发现崩溃操作系统的C ++应用程序。
我只想知道在什么情况下会发生这种行为,所以我知道在哪里看。将问题简化为简单并追踪问题是很困难的,因为光线跟踪的本质是高度并行并且可以处理大量数据。
哦,问题是不无限递归导致堆栈溢出。我故意这样做,并没有使操作系统崩溃。
答案 0 :(得分:2)
您是否在调试模式下检查了内存使用情况?过多的内存使用和溢出交换会降低系统速度,就像地狱一样 - 你的系统可能没有技术上的崩溃 - 只是变得超级慢。在发布模式下,所有分配都将以相当快的速度发生 - 因此您可能需要查看内存使用情况。
正如你所说,无限递归不会导致操作系统崩溃 - 它总是会导致分段错误。