什么是野指针和悬空指针?

目录

1. 野指针(Wild Pointer)

2. 悬空指针(Dangling Pointer)


野指针悬空指针都是在C/C++编程中常见的错误,它们会导致程序行为不可预测,甚至引发崩溃或安全漏洞。以下是对两者的详细解释和总结表格:

1. 野指针(Wild Pointer)

  • 定义: 野指针是一个没有被初始化的指针,指向一个未知的或随机的内存位置。
  • 产生原因: 当指针变量声明后没有被赋予有效的内存地址时就会成为野指针。
  • 危害: 访问野指针会导致程序出现不确定的行为,如崩溃、数据损坏,甚至可能引发安全漏洞。
  • 示例:
int *p;  // 未初始化的指针,即野指针
*p = 10; // 未定义行为

2. 悬空指针(Dangling Pointer)

  • 定义: 悬空指针是一个曾经指向有效内存位置的指针,但该内存已被释放或超出了其作用域。
  • 产生原因: 当指针指向的内存被释放(如deletefree操作)或指向的局部变量超出作用域时,指针成为悬空指针。
  • 危害: 使用悬空指针访问已释放的内存可能导致程序崩溃、内存泄漏、或数据损坏。
  • 示例:
int *p = new int(10);
delete p; // p 成为悬空指针
*p = 20;  // 未定义行为

通过正确初始化指针并在释放内存后将指针置为nullptr,可以有效防止野指针和悬空指针的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值