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