C++中的野指针和内存泄漏问题

野指针问题

什么是野指针

在c++中,使用指针是需要解引用去访问一块内存地址的。当一个指针变量指向的地址是非法地址时,就会出现野指针问题。一般我们在写代码的时候,会对指针变量有一个判空处理,但是对于野指针时,是不会被 ‘ ptr == nullptr ’ 中识别出来的。会导致在接下来的代码逻辑中,造成非法访问,异常,导致进程崩溃退出等等的问题。

野指针问题成因

野指针问题也是一个在实际代码工作中很常见的一个问题,也会不同的情况导致野指针问题出现:

  1. 指针变量的初始化,指针变量被定义后,没有正确初始化;
  2. 数据结构内存越界访问;
  3. 指针变量指向地址空间被释放后,指针变量没有置空。

内存泄漏

在C++中,因为内存管理是需要程序员自己控制的,那当程序员一些动态分配一些内存空间后,没有完成释放,就会造成内存泄漏问题。即这块内存虽然没有被我们所使用了, 但是依然处在一种被占用的状态,就像沙漏漏了一样无法使用。就是内存泄漏问题。

内存泄漏和野指针问题, 都是在写代码时,对内存的管理出现了疏漏,导致出现的问题。
同时,这种问题编译器是无法检查出来的,只有运行时才能发现,导致只有出现问题后才能去修,会让效率变低。

智能指针

智能指针时C++中想到一种自动管理内存的方法RAII。
大体思路是我们通过一个“智能指针类”,利用栈上的空间是自动回收的。在智能指针的构造函数中完成对堆上开辟空间的初始化,来避免一些野指针问题。在析构函数中,完成对被这个智能指针管理的堆上内存的释放。来避免一些内存泄漏问题。
最早的智能指针是在BOOST库中,
后来C++官方给了正式编制,
初期有auto_ptr,但是因为可能会有多个智能指针去保护同一片堆上内存空间的情况,这种时候就会导致同一片内存多次释放的问题。
所以在C++11中增加了
unique_ptr shared_ptr weak_ptr来解决了智能指针的一些安全问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏枍

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值