Undefined behavior là hành vi mà chuẩn C++ không quy định kết quả — compiler được phép làm bất cứ điều gì: crash, kết quả sai, hoặc "chạy đúng" vô tình.
Ví dụ phổ biến:
| Tình huống | Lý do UB |
|---|---|
int p = nullptr; p = 1; | dereference null pointer |
int a[5]; a[10] = 0; | out-of-bounds array access |
int x; int y = x + 1; | đọc biến chưa khởi tạo |
delete p; delete p; | double-free |
| Trả về reference tới biến local | biến đã ra scope khi dùng |
| Signed integer overflow | INT_MAX + 1 không wrap |
Tại sao nguy hiểm: compiler tối ưu hóa dựa trên giả định "không có UB" — code trông đúng vẫn bị compile thành hành vi sai hoàn toàn, thường chỉ lộ ra ở production build với -O2.
Lưu ý: unsigned integer overflow không phải UB — wrap modulo 2^N theo chuẩn.