繁体   English   中英

奇怪的C ++错误,添加2条打印语句后程序运行正常,没有它们的段错误

[英]Weird C++ bug, program works fine when 2 print statements are added, segfaults without them

我正在用C ++编写一些必须计算许多射线/对象交点的代码,但遇到了一个我不理解的非常奇怪的错误。

在某些非常大的实例(许多三角形和射线)上,我的程序存在段错误。 我一直在试图找出这些段错误的来源,但我感到很困惑。 我已经检查了我的代码,似乎不应该尝试索引数组的末尾或访问空指针。 看来我的计算机似乎还没有内存不足。 当我监视它时,看起来还有几百兆的可用空间。

在调试时,我尝试了以下操作:我在代码中插入了两个print语句,以试图确定导致段错误的精确交点计算。 对我来说不幸的是,当我插入打印语句并再次运行该程序时,一切正常。 这不是段错误。 因此,如果我删除了这两个打印语句并运行了该程序,则它会出现段错误,并且如果将它们保留在其中,则可以正常工作(尽管要慢得多,因为它必须打印所有内容)。 除删除/添加这些打印语句外,其他所有内容均保持完全相同。

有什么可能导致这种情况发生? 将打印语句添加到C ++程序如何导致其不出现段错误?

如果有帮助的话,该算法只是一个线程,我在Linux中使用g ++编译了所有内容。

有什么可能导致这种情况发生? 将打印语句添加到C ++程序如何导致其不出现段错误?

欢迎来到不确定的行为。

您需要用自检版本替换数组/指针/ etc,并证明 (而不是猜测)在这些方面没有任何错误。

插入打印语句“修复”了段错误这一事实清楚地表明您正在访问不应访问的内存。

最好的办法是取出打印语句,然后通过调试器运行程序。 由于您使用的是Linux,因此请使用-g标志编译程序并通过gdb运行它。 它可能会告诉您确切的段错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM