Undefined Behavior (UB)** คือการที่มาตรฐานไม่กำหนด行為ของโปรแกรม ให้ compiler/OS ทำอะไรก็ได้ (อาจ crash, อาจทำงานได้, อาจผลลัพธ์ผิด)
Segmentation fault เป็น หนึ่งในผลลัพธ์ที่เป็นไปได้ ของ UB แต่ไม่ใช่ทุก UB เกิด segfault
ตัวอย่าง
#include <iostream>
int main() {
int arr[2];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2; // Undefined Behavior: เขียนเกิน array bounds
arr[3] = 3; // Undefined Behavior
}
โค้ดนี้อาจ: (1) รันผ่านได้ (2) segfault (3) ทำลายข้อมูลอื่น (4) ผลลัพธ์แปลกๆ ขึ้นอยู่กับ compiler, OS, optimization level, memory layout
อ่านเพิ่ม: What Every C Programmer Should Know About Undefined Behavior