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

Lỗi phân đoạn (segmentation fault) có phải hành vi chưa định nghĩa (UB) trong C++?


Hành vi chưa định nghĩa (UB) là cách trao tự do cho người triển khai (biên dịch, OS) và máy tính làm "bất cứ gì họ muốn", tức là không quan tâm hậu quả.

Các trường hợp gây segmentation fault mang tính nhất thời. Chúng không luôn dẫn đến segfault mà có thể chạy đúng (hoặc ít nhất trông như đúng). Ví dụ:

#include <iostream>
int main() {
    int arr[2];
    arr[0] = 0;
    arr[1] = 1;
    arr[2] = 2; // Hành vi chưa định nghĩa
    arr[3] = 3; // Hành vi chưa định nghĩa
}

Mã này có thể chạy đúng hoặc gây segfault. Không thực sự được định nghĩa và phụ thuộc triển khai. Xem thêm về UB tại: https://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html