悬空、空、NULL 和野指针

2024 年 8 月 28 日 | 3 分钟阅读

悬空指针

悬空指针是指向已删除(或已释放)内存位置的指针。指针可以通过三种方式成为悬空指针。

1. 内存释放

C++ 代码

2. 函数调用

C++ 代码

C 代码

输出

A garbage Address

如果x是静态变量,则上述问题不会发生(或者p不会成为悬空指针)。

C++ 代码

输出

5

3. 变量超出作用域

void指针

void指针是一种特殊的指针类型——void *——它指向存储中未指定的数据位置。该类型被称为void。基本上,它指向的数据可以是任何类型。如果我们将一个char数据类型地址分配给一个void指针,它将成为一个char指针;一个int数据类型地址将成为一个int指针,依此类推。因为任何指针类型都可以转换为void指针,所以它可以指向任何值。

重要注意事项

  • void指针无法直接解引用。但是,可以通过对void指针进行类型转换来实现解引用。
  • 由于缺乏具体的值和大小,void指针无法进行指针算术。

C++ 代码

输出

Integer variable is = 4
Float variable is= 5.500000

空指针

C++ 代码

输出

The value of ptr is (nil)

重要注意事项

  • 未初始化指针与NULL - 未初始化指针存储一个未定义的值。空指针存储一个定义的值,但该值被环境定义为不是任何成员或对象的有效地址。
  • NULL与void指针 - NULL是一个值,而void指针是一种类型。

野指针

野指针是指未初始化为任何值(甚至不是NULL)的指针。该指针可能被设置为一个非NULL的垃圾值,而不是一个有效地址。

C++ 代码