未定義動作
C/C++ で挙動が規定されていないコード。コンパイラは何をしてもよく、そのコードを消してしまってもよい。
典型例は符号付き整数のオーバーフロー、0 による除算、解放後メモリの使用、未初期化メモリの読み出し。コンパイラは「未定義動作は起きない」前提で最適化するため、ただのバグがセキュリティホールに化けることがある。ASAN や UBSAN のようなサニタイザーでテスト中に検出できる。Rust は言語設計により大半の未定義動作を排除している。
C/C++ で挙動が規定されていないコード。コンパイラは何をしてもよく、そのコードを消してしまってもよい。
典型例は符号付き整数のオーバーフロー、0 による除算、解放後メモリの使用、未初期化メモリの読み出し。コンパイラは「未定義動作は起きない」前提で最適化するため、ただのバグがセキュリティホールに化けることがある。ASAN や UBSAN のようなサニタイザーでテスト中に検出できる。Rust は言語設計により大半の未定義動作を排除している。