Vi phạm quyền truy cập
Vi phạm quyền truy cập là một loại lỗi cụ thể xảy ra khi một chương trình cố gắng truy cập vào một vị trí bộ nhớ không hợp lệ. Trong C++, vi phạm quyền truy cập phổ biến nhất là do:
- truy cập tới dữ liệu trong vị trí bộ nhớ được trỏ tới một null hoặc con trỏ không hợp lệ.
- Truy cập một mảng ngoài giới hạn.
- Đọc hoặc ghi vào bộ nhớ được giải phóng bởi người dùng hoặc hệ điều hành.
Điều quan trọng là xác định các vi phạm quyền truy cập vì chúng có thể dẫn đến hành vi không thể đoán trước, sự cố ứng dụng hoặc hỏng dữ liệu.
Một số ví dụ về vi phạm quyền truy cập là:
Dereferencing null hoặc con trỏ không hợp lệ
int *p = nullptr;
int x = *p; // Vi phạm quyền truy cập: cố gắng truy cập nội dung của con trỏ null
Truy cập một mảng ngoài giới hạn
int arr[5] = {1, 2, 3, 4, 5};
int y = arr[5]; // Vi phạm quyền truy cập: chỉ mục nằm ngoài giới hạn (chỉ số hợp lệ là 0-4)
Đọc hoặc ghi vào bộ nhớ được giải phóng
int* p2 = new int[10];
delete[] p2;
p2[3] = 42; // Vi phạm quyền truy cập: ghi vào bộ nhớ đã được giải phóng
Gỡ lỗi vi phạm quyền truy cập
Các công cụ như trình gỡ lỗi, trình phân tích tĩnh và trình lập hồ sơ có thể giúp xác định các vi phạm quyền truy cập trong mã code của bạn. Ví dụ:
- Microsoft Visual Studio: Sử dụng trình gỡ lỗi tích hợp sẵn để xác định dòng mã code chịu trách nhiệm về lỗi vi phạm quyền truy cập.
- Valgrind: Một công cụ Linux phổ biến giúp phát hiện rò rỉ bộ nhớ và vi phạm quyền truy cập trong các chương trình C++ của bạn.
- AddressSanitizer: Trình phát hiện lỗi bộ nhớ thời gian chạy cho C++ có thể phát hiện các truy cập vượt quá giới hạn, rò rỉ bộ nhớ và lỗi sử dụng sau khi sử dụng miễn phí.