博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

野指针

Posted on 2025-09-27 17:10  steve.z  阅读(12)  评论(0)    收藏  举报

野指针(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被销毁,返回的指针成为野指针

野指针的危害:

  • 程序崩溃:访问非法内存地址
  • 数据损坏:意外修改其他变量的值
  • 安全漏洞:可能被恶意利用
  • 调试困难:错误位置随机,难以重现

预防措施:

  1. 初始化指针
int *p = NULL;  // 或 int *p = nullptr; (C++)
  1. 释放后置空
free(p);
p = NULL;
  1. 检查指针有效性
if (p != NULL) {
    *p = 10;
}
  1. 使用智能指针(C++)
std::unique_ptr<int> p = std::make_unique<int>(42);