野指针与悬空指针

野指针:
就是没有被初始化过的指针或者指向受限访问的指针(不给用户访问)
如何防止野指针:
初始化指针nullptr
悬空指针:
指针最初指向的内存已经被释放了的指针,虽然指针指向的对象已经释放,但是指针本身还是没有释放。
下述例子中,p2就是一个悬空指针

#include <stdlib.h>
int main(int argc, char *argv[])
{
        int *p1 = (int *)malloc(sizeof (int));
        int *p2 = p1;        /* p2 and p1 are pointing to the same memory */
        free(p1);            /* p1 is       a dangling pointer, so is p2  */
        p1 = NULL;           /* p1 is not   a dangling pointer any more   */
        return (*p2 & 0x7f); /* p2 is still a dangling pointer            */
}

如何防止悬空指针:
智能指针或者在释放指针前判断指针是否为空,不为空再释放。```
总结:
无论是野指针还是悬空指针,都是指向无效内存区域(这里的无效指的是"不安全不可控")的指针。 访问"不安全可控"(invalid)的内存区域将导致"Undefined Behavior"。也就是说:任何可能都会发生。要么编译失败,要么执行得不正确(崩溃(e.g. segmentation fault)或者悄无声息地产生不正确的执行结果),或者偶尔会正确地产生程序员希望运行的结果。

参考文章:
https://www.cnblogs.com/idorax/p/6475941.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值