今日、私たちは異常な現象に遭遇しました。同僚が彼のコードで通常は正常に動作する関数を呼び出していて、libc(gethostbyname)でセグメンテーション違反を引き起こしていました。困惑したのは、同じランタイムの他のソースファイルで同じ関数が問題なく動作したことです。驚いたことに、valgrindを使用すると、segfaultは消えました。実際、valgrindで完全に機能し、エラーは報告されていません。
コンパイラの神々をなだめるために多くの犠牲を払った後、私たちは最終的に、関数を宣言するヘッダーファイルが関数を呼び出すソースファイルから欠落していることに気付きました。これを追加すると、すべてが正常に実行されました。
gcc / ldが関数が認識されなかったことを示すエラー(または警告)を生成しなかったのはなぜですか?、なぜvalgrindで機能したのですか?
ありがとう。