Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Các hành vi không xác định (Undefined Behavior) phổ biến trong C++


Trong C++, hành vi không xác định (UB) xảy ra khi vi phạm quy tắc ngôn ngữ. Dưới đây là các trường hợp UB thường gặp mà lập trình viên cần biết.

1. Chia cho 0

int x = 10, y = 0;
int z = x / y; // UB: runtime error

2. Sử dụng biến chưa khởi tạo

bool x;
if (x == true) cout << "true"; // giá trị rác, kết quả không xác định

3. Truy cập con trỏ NULL

int* ptr = nullptr;
cout << *ptr; // UB: segmentation fault

4. Truy cập mảng ngoài phạm vi

int arr[10];
for (int i = 0; i <= 10; i++) cout << arr[i]; // UB: đọc/ghi bộ nhớ không hợp lệ

5. Tràn số nguyên có dấu (signed integer overflow)

int x = INT_MAX;
cout << x + 1; // UB: có thể quay vòng thành INT_MIN

6. Sửa đổi chuỗi literal

char* str = "Hello World";
str[2] = 'x'; // UB: chuỗi literal là read-only

Lưu ý: UB không đảm báo báo lỗi compile-time; chương trình có thể chạy sai âm thầm, crash ngẫu nhiên hoặc hoạt động "may mắn" đúng trên một compiler nhưng sai trên compiler khác.