Con trỏ lưu địa chỉ bộ nhớ. Con trỏ rác (wild pointer) cũng lưu địa chỉ nhưng trỏ đến vùng nhớ chưa cấp phát hoặc đã giải phóng. Chúng trỏ đến địa chỉ ngẫu nhiên, gây hành vi không xác định (undefined behavior).
Con trỏ trở thành wild khi khai báo nhưng không khởi tạo.
Ví dụ
#include <iostream>
using namespace std;
int main() {
int *arr; // Khai báo, KHÔNG khởi tạo -> wild pointer
for (int i = 0; i < 5; i++)
cout << arr[i] << " ";
return 0;
}
Kết quả (ví dụ)
1 0 -426634956 32764 0
Giải thích: arr chưa được gán địa chỉ hợp lệ. Truy cập arr[i] đọc rác bộ nhớ, in ra giá trị ngẫu nhiên, có thể crash.
Các trường hợp gây wild pointer
- Khai báo con trỏ không gán giá trị:
int *p; - Con trỏ trỏ đến biến cục bộ đã hết scope (dangling pointer).
- Con trỏ sau
free()/deletekhông gán NULL (dangling pointer).
Cách tránh
- Luôn khởi tạo con trỏ:
int *p = NULL;hoặcint *p = &var; - Sau
free(p)/delete p, gánp = NULL;. - Dùng smart pointer (
unique_ptr,shared_ptr) trong C++. - Bật cảnh báo compiler:
-Wall -Wextra -Wuninitialized.