未定義動作
パスカル・クオックとジョン・レガーによれば、C言語における未定義動作は、大きく次のような種類に分類できる。
spatial memory safety violations (空間メモリ安全性違反)
temporal memory safety violations (時間メモリ安全性違反)
integer overflow (整数オーバーフロー)
strict aliasing violations (厳密なエイリアシング違反)
alignment violations (アライメント違反)
unsequenced modifications (非逐次的変更)
data races (データ競合)
loops that neither perform I/O nor terminate (入出力も終了も行わないループ)
C言語では、初期化される前に自動変数を使用すると、ゼロ除算、符号付き整数のオーバーフロー、配列の境界違反(バッファオーバーフローを参照)、またはヌルポインタのデリファレンスと同様の未定義動作が発生する。一般に未定義動作は、抽象化された実行マシンを不明な状態にするため、プログラム全体の動作を未定義にしてしまう。
文字列リテラルを変更しようとすると、未定義動作が発生する。
整数をゼロで除算すると、未定義動作が発生する。