dangling & wild pointer

本文详细介绍了空悬指针与野指针的概念及产生原因,并通过具体示例展示了如何避免这两种指针的出现,确保程序运行的安全性和稳定性。

[全部参考自Wiki](https://en.wikipedia.org/wiki/Dangling_pointer)

空悬指针/野指针

###1.野指针
wild pointer,没有初始化的指针就是野指针。

int func() {
char * dp; //野指针,没有初始化
static char * sdp; //非野指针,因为静态变量会默认初始化为0
}

###2.空悬指针
dangling pointer,指向已经释放对象或已经回收的地址。

####情况1

```
{
char * dp = NULL;
{
char c;
dp = &c;
}
/*
变量c在这段区域内被释放,
dp变成了悬空指针
*/
}
```

####情况2

```
#include <stdlib.h>

void func() {
char * dp = (char *)malloc(A_CONST);
free(dp); //dp变成一个空悬指针
dp = NULL; //dp不在是空悬指针
/* ... */
}
```
上面例子提醒我们,当free或delete调用时,除了释放动态申请的内存,还要将相关的指针指
向NULL,避免出现空悬指针。

####情况3

```
int * func(void) {
int num = 1234;
/* ... */
return &num;
}
```
num是基于栈的变量,当func函数返回的时候,变量的空间就会被回收,因此获得的指针指向的
空间有可能被覆盖。

转载于:https://www.cnblogs.com/R0SS/p/4733450.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值