it编程 > 编程语言 > C/C++

c++ 空指针,悬挂指针(悬空指针),野指针的使用与区别小结

3人参与 2026-08-07 C/C++

在 c、c++ 等编程语言中,指针是一个强大但容易出错的特性。除了空指针、悬挂指针、野指针外,还有一些其他类型的指针概念。下面为你详细介绍它们的区别和示例:

1. 空指针(null pointer)

定义:明确不指向任何内存地址的指针,通常用null(c)或nullptr(c++)表示。
产生场景:

风险:解引用空指针会导致程序崩溃(段错误)。

示例:

int* ptr = null;
// *ptr = 10;  // 错误:解引用空指针

2. 悬挂指针(dangling pointer)

定义:指向已释放内存的指针。
产生场景:

风险:解引用悬挂指针会导致未定义行为(如读取随机数据、程序崩溃)。

示例:

int* ptr = new int(42);
delete ptr;  // 内存已释放
// ptr 现在是悬挂指针
// *ptr = 10;  // 危险:解引用悬挂指针
int* getlocalptr() {
    int x = 10;
    return &x;  // 错误:返回局部变量的地址(悬挂指针)
}
// int* ptr = getlocalptr();  // ptr 是悬挂指针

3. 野指针(wild pointer)

定义:未初始化的指针,指向随机内存地址。
产生场景:

风险:解引用野指针会访问非法内存,导致程序崩溃或数据损坏。

示例:

int* ptr;  // 野指针(未初始化)
// *ptr = 10;  // 错误:解引用野指针

4. 无效指针(invalid pointer)

定义:泛指所有指向无效内存的指针,包括悬挂指针、野指针,以及越界指针。
产生场景:

风险:解引用无效指针导致未定义行为。

示例:

int arr[5];
int* ptr = &arr[10];  // 越界指针(无效)
// *ptr = 10;  // 错误:访问非法内存

5. 野引用(wild reference)

定义:c++ 中未初始化的引用(语法层面不允许,但可通过强制类型转换间接产生)。
产生场景:

风险:使用野引用会导致未定义行为。

示例:

int& ref = *(int*)0x12345678;  // 野引用(指向随机地址)
// ref = 10;  // 危险:修改非法内存

6. 悬空引用(dangling reference)

定义:与悬挂指针类似,但针对引用类型。
产生场景:

风险:使用悬空引用会导致未定义行为。

示例:

int& getlocalref() {
    int x = 10;
    return x;  // 错误:返回局部变量的引用(悬空引用)
}
// int& ref = getlocalref();  // ref 是悬空引用

7. 空悬指针(dangling pointer)

说明:与 “悬挂指针” 是同一概念的不同翻译。

8. 野指针(uninitialized pointer)

说明:与 “野指针” 是同一概念,强调未初始化的特性。

9. 函数指针错误

定义:错误地调用函数指针。
产生场景

风险:调用无效函数指针会导致程序崩溃。

示例

void (*funcptr)() = null;
// funcptr();  // 错误:调用空函数指针

10. 野指针(wild pointer)与野引用(wild reference)的对比

指针类型定义示例风险
野指针未初始化的指针int* ptr;解引用非法内存
野引用通过非法地址创建的引用int& ref = *(int*)0x1234;修改非法内存

如何避免这些问题?

总结对比表

指针类型定义典型场景解引用风险
空指针指向nullint* ptr = nullptr;立即崩溃(段错误)
悬挂指针指向已释放的内存delete ptr;后未置空未定义行为(可能随机值)
野指针未初始化的随机指针int* ptr;(未赋值)崩溃或数据损坏
无效指针泛指所有无效内存的指针越界指针、重复释放的指针未定义行为
悬空引用引用已销毁的对象返回局部变量的引用未定义行为

通过理解这些概念和示例,可以有效减少指针相关的 bug,提高代码的健壮性。

到此这篇关于c++ 空指针,悬挂指针(悬空指针),野指针的使用与区别小结的文章就介绍到这了,更多相关c++ 空指针,悬挂指针,野指针内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

Qt实现将PDF文件转高清图片的完整指南

08-07

C++ STL迭代器从原理到实战的完全指南

08-07

C/C++ 开发中CMake语法深度解析之控制流、列表与函数实战指南

08-06

基于Qt实现Windows任务栏进度条显示(附源码)

08-06

Qt实现屏幕截图小工具的完整指南

08-06

C语言中&符号的多重用法与底层原理详解

08-05

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论