簡體   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