哈喽 小伙伴大家好 新年已经接近尾声 本篇文章就来介绍一下C++危险指针 空指针 野指针
C++危险指针:
在C++中,"危险指针"通常指的是那些未经初始化、越界访问、空指针解引用、野指针(dangling pointers)或者未释放内存等可能导致程序崩溃或未定义行为的指针。使用这些指针是非常危险的,因为它们可能导致程序崩溃、数据损坏、安全漏洞等。
空指针:
定义:空指针是一个特殊的指针,它不指向任何有效的内存地址。在C++中,通常使用
nullptr
(C++11及以后版本)或者NULL
(C++98及以前版本,NULL
通常被定义为(void*)0
)来表示空指针。
野指针:
定义:野指针是指向无效内存地址的指针,通常是因为指针被释放或未初始化,但指针变量本身没有被置为
nullptr
,因此它仍然指向原来的内存地址,但这个地址可能已经被系统分配给其他变量或已经被释放。
1.未初始化的指针:
int *p; // p指向一个随机的内存地址,使用它之前必须初始化
2.越界访问:
int arr[5]; int *p = arr; p[10] = 42; // 访问arr[10]是越界的,因为数组只有5个元素
3.空指针解引用:
int *p = nullptr; *p = 42; // 解引用空指针会导致程序崩溃
4.野指针
int *p = new int(42); delete p; p = nullptr; // 忘记将p置为nullptr,之后可能会误用p导致野指针问题
5.未释放内存:
int *p = new int[10]; // ... 使用p ... // 忘记释放p指向的内存,导致内存泄漏
如何避免野指针和空指针
初始化指针:在使用指针之前,确保将其初始化为
nullptr
或有效的内存地址。检查指针:在使用指针之前,检查它是否为
nullptr
或有效地址。释放内存后重置指针:在释放指针指向的内存后,立即将指针重置为
nullptr
。使用智能指针:智能指针(如
std::unique_ptr
和std::shared_ptr
)可以自动管理内存,减少野指针和内存泄漏的风险。避免返回局部变量的地址:函数返回局部变量的地址是不安全的,因为局部变量在函数返回后可能不再存在。
总结:总的来说 空指针和野指针都属于C++的危险指针 我们要避免使用危险指针 因为他真的很危险 会造成内存泄漏 数据损坏 安全漏洞
好了 本篇文章就到这里结束了 拜拜~