我正在用 C++ 编写一些代码,这些代码必须计算大量的光线/对象交叉点,并且我遇到了一个非常奇怪的错误,我不明白。
在一些非常大的实例(很多三角形和射线)上,我的程序会出现段错误。我一直试图找出这些段错误的来源,但我被难住了。我查看了我的代码,似乎我不应该尝试从数组的末尾索引或访问空指针。我的计算机似乎也没有内存不足。当我监控它时,看起来还有几百兆字节的空闲空间。
在调试时,我尝试了以下操作:我在代码中插入了两个打印语句,试图确定导致段错误的确切交叉计算。对我来说不幸的是,当我插入打印语句并再次运行程序时,一切正常。它没有段错误。因此,如果我删除这两个打印语句并运行程序,它会出现段错误,如果我将它们保留在其中,它就可以正常工作(尽管它必须打印所有内容要慢得多)。除了删除/添加这些打印语句之外,其他所有内容都保持完全相同。
什么可能导致这种情况发生?将打印语句添加到 c++ 程序如何可能导致它没有段错误?
如果它有帮助,算法只是一个单线程,我在 Linux 中使用 g++ 编译了所有内容。