野指针问题
什么是野指针
在c++中,使用指针是需要解引用去访问一块内存地址的。当一个指针变量指向的地址是非法地址时,就会出现野指针问题。一般我们在写代码的时候,会对指针变量有一个判空处理,但是对于野指针时,是不会被 ‘ ptr == nullptr ’ 中识别出来的。会导致在接下来的代码逻辑中,造成非法访问,异常,导致进程崩溃退出等等的问题。
野指针问题成因
野指针问题也是一个在实际代码工作中很常见的一个问题,也会不同的情况导致野指针问题出现:
- 指针变量的初始化,指针变量被定义后,没有正确初始化;
- 数据结构内存越界访问;
- 指针变量指向地址空间被释放后,指针变量没有置空。
内存泄漏
在C++中,因为内存管理是需要程序员自己控制的,那当程序员一些动态分配一些内存空间后,没有完成释放,就会造成内存泄漏问题。即这块内存虽然没有被我们所使用了, 但是依然处在一种被占用的状态,就像沙漏漏了一样无法使用。就是内存泄漏问题。
内存泄漏和野指针问题, 都是在写代码时,对内存的管理出现了疏漏,导致出现的问题。
同时,这种问题编译器是无法检查出来的,只有运行时才能发现,导致只有出现问题后才能去修,会让效率变低。
智能指针
智能指针时C++中想到一种自动管理内存的方法RAII。
大体思路是我