stderrへの有用な出力とstdoutへのほとんどのノイズ(デバッグしている場合を除く)を生成するC ++ユニットテストがあるので、stdoutを/ dev/nullにリダイレクトしたいと思います。
不思議なことに、これを行うとセグメンテーション違反が発生するようです。
コードが">/dev / null"でセグメンテーション違反を起こし、それ以外の場合は正常に実行される理由はありますか?
printf
ベアリングがある場合、出力は完全にsによって生成されます。
問題のあるコードは、公開のために提出されている研究であるため、投稿するのは困難です。この説明に基づいて、「明らかな」考えられる原因があることを願っています。
事後分析
セグメンテーション違反は次のようなコードによって引き起こされていました:
ArrayElt* array = AllocateArrayOfSize(array_size);
int index = GetIndex(..) % array_size;
ArrayElt elt = array[index];
C / C ++でが負のx % y
場合、それが負のままであることを何度も忘れました。x
さて、なぜ私がにリダイレクトしたときにのみそれが起こったの/dev/null
ですか?私の推測では、アクセスしていた無効なメモリアドレスはstdoutの出力バッファにあり、このバッファは必要のないときに割り当てられません。
良い答えをありがとう!