多くのレイ/オブジェクトの交差を計算する必要があるコードを C++ で書いていますが、理解できない非常に奇妙なバグが発生しています。
いくつかの非常に大きなインスタンス (たくさんの三角形と光線) で、私のプログラムはセグメンテーション違反を起こします。私はこれらのセグメンテーション違反の原因を突き止めようとしましたが、困惑しました。コードを調べたところ、配列の末尾からインデックスを作成したり、null ポインターにアクセスしたりする必要はないようです。また、コンピューターのメモリが不足しているようには見えません。監視すると、まだ数百メガバイトの空き容量があるようです。
デバッグ中に、次のことを試みました。セグメンテーション違反の原因となった正確な交差計算を特定するために、コードに 2 つの print ステートメントを挿入しました。残念ながら、印刷ステートメントを挿入してプログラムを再度実行すると、すべてが機能しました。セグメンテーション違反ではありませんでした。したがって、これら 2 つの print ステートメントを削除してプログラムを実行すると、セグメンテーション フォールトが発生し、そのままにしておくと正常に動作します (ただし、すべてを印刷する必要があるため、はるかに遅くなります)。これらの印刷ステートメントの削除/追加を除いて、他のすべてはまったく同じに保たれます。
何が原因でこれが起こる可能性がありますか? C++プログラムにprintステートメントを追加すると、セグメンテーション違反が発生しない可能性がありますか?
それがまったく役立つ場合、アルゴリズムは単一のスレッドにすぎず、Linux で g++ を使用してすべてをコンパイルしました。