野指针(Wild Pointer)是指向未知或无效内存地址的指针,是C/C++编程中常见的一种错误类型。
野指针的几种情况:
1. 未初始化的指针
int *p; // p指向随机地址,是野指针
*p = 10; // 危险!可能访问任意内存位置
2. 释放内存后未置空的指针
int *p = malloc(sizeof(int));
free(p); // 释放内存
// p仍然指向原地址,但该地址已无效
*p = 10; // 野指针访问,未定义行为
3. 指向已销毁对象的指针
int* func() {
int local = 42;
return &local; // 返回局部变量地址
}
// 函数结束后,local被销毁,返回的指针成为野指针
野指针的危害:
- 程序崩溃:访问非法内存地址
- 数据损坏:意外修改其他变量的值
- 安全漏洞:可能被恶意利用
- 调试困难:错误位置随机,难以重现
预防措施:
- 初始化指针
int *p = NULL; // 或 int *p = nullptr; (C++)
- 释放后置空
free(p);
p = NULL;
- 检查指针有效性
if (p != NULL) {
*p = 10;
}
- 使用智能指针(C++)
std::unique_ptr<int> p = std::make_unique<int>(42);
浙公网安备 33010602011771号