1.37、野指针和内存泄漏是什么?如何避免?
野指针(Wild Pointer)
产生原因:
- • 指针声明后未初始化即使用。
- • 指针指向的对象已被释放(悬挂指针)。
- • 指针被错误赋值为无效地址。
避免方法:
- • 指针声明时进行初始化,指向合法内存或赋值为
nullptr
。 - • 动态分配内存后确保指针指向有效地址。
- • 释放内存后立即将指针置为
nullptr
,避免悬挂。 - • 使用智能指针(如
std::unique_ptr
、std::shared_ptr
)自动管理生命周期。
内存泄漏(Memory Leak)
定义:程序动态分配的内存未被释放,且程序中不再持有指向该内存的指针,导致这部分内存无法回收,造成系统资源浪费,严重时会导致程序性能下降甚至崩溃。
产生原因:
- • 动态分配内存后未调用对应的释放操作(
delete/delete[]
或free
)。 - • 指针被覆盖或丢失,导致无法访问原有内存。
- • 复杂数据结构中未正确释放所有节点。
避免方法:
- • 使用智能指针自动管理动态内存,避免手动释放错误。
- • 对动态数组使用
delete[]
,避免只调用delete
。 - • 避免不必要的堆内存分配,优先使用栈或容器类(如
std::vector
)。 - • 使用内存检测工具(如Valgrind、AddressSanitizer)定位泄漏。
- • 养成良好资源管理习惯,确保每个
new
对应一个delete
。
总结
问题 | 本质 | 主要风险 | 关键避免策略 |
野指针 | 指针指向非法内存 | 程序崩溃、未定义行为 | 初始化指针、释放后置空、智能指针 |
内存泄漏 | 动态内存未释放且不可访问 | 内存占用增长、性能下降、崩溃 | 智能指针管理、配对释放、检测工具 |
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1302
文章版权归作者所有,未经允许请勿转载。
THE END