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

Danh sách nguyên nhân thường gặp của Segmentation Fault trong C/C++

Segmentation fault (lỗi phân đoạn) xảy ra khi chương trình truy cập vùng nhớ không được phép: chưa khởi tạo, vượt giới hạn, hoặc ghi vào vùng chỉ đọc. Dưới đây là các nguyên nhân phổ biến:

  • Truy cập mảng vượt giới hạn — đọc/ghi chỉ số < 0 hoặc >= size.
  • Giải tham chiếu con trỏ NULL — dùng con trỏ chưa gán địa chỉ hợp lệ.
  • Giải tham chiếu bộ nhớ đã giải phóng — dùng con trỏ sau free() (dangling pointer).
  • Giải tham chiếu con trỏ chưa khởi tạo — con trỏ chứa giá trị rác.
  • Sai toán tử & (lấy địa chỉ) và * (giải tham chiếu) — nhầm lẫn khi truyền tham số.
  • Định dạng sai trong printf/scanf — specifier không khớp kiểu đối số (vd: %d cho float).
  • Tràn ngăn xếp (Stack overflow) — đệ quy quá sâu, mảng cục bộ quá lớn.
  • Ghi vào bộ nhớ chỉ đọc — sửa chuỗi literal (char *s = "abc"; s[0] = 'x';), hoặc section .text.

Cách debug: Dùng gdb (chạy với -g), valgrind, AddressSanitizer (-fsanitize=address), bật cảnh báo trình biên dịch (-Wall -Wextra).