「条件付きジャンプまたは移動は初期化されていない値に依存する」Valgrind メッセージの特定
Valgrind の謎の「条件付きジャンプまたは移動は初期化されていない値に依存する」 value(s)」というメッセージは、不可解なパズルになる可能性があります。初期化されていない値が使用されているポイントは特定しますが、その起源を明らかにすることはできません。
この問題に取り組むには、valgrind オプション --track-origins=yes を利用できます。これにより、Valgrind は初期化されていない値の起源を追跡できるようになりますが、メモリ使用量と実行時間の増加が伴います。
レポート動作を理解する
次の点に注意することが重要です。 Valgrind は、初期化されていない値を最初に使用したときにすぐには報告しません。代わりに、プログラムの監視可能な動作に影響を与える可能性のある方法でデータが使用されるまで待機します。これについては、Valgrind マニュアルで説明されています。
プログラムではジャンク (初期化されていない) データを好きなだけコピーできることを理解することが重要です。 Memcheck はこれを監視し、データを追跡しますが、文句は言いません。苦情は、プログラムが外部から見える動作に影響を与える可能性のある方法で初期化されていないデータを利用しようとした場合にのみ発行されます。
Valgrind からの追加情報
Valgrind FAQ では、次のことがさらに明確にされています。
初期化されていないメモリ値のコピーの積極的なレポートについては、これが何度も提案されています。残念ながら、ほとんどすべてのプログラムは初期化されていないメモリ値を合法的にコピーしており (コンパイラがアライメントを維持するために構造体をパディングするため)、熱心なチェックにより数百もの誤検知が発生します。したがって、Memcheck は現時点では積極的なチェックをサポートしていません。
以上がValgrind が「条件付きジャンプまたは移動は初期化されていない値に依存する」と報告するのはなぜですか?またその原因を追跡するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。