使用智能指针错误导致内存泄漏_是否有Valgrind用智能指针检测“内存泄漏”

我们的团队最近开始尝试使用智能指针,并且越来越担心我们检测和纠正内存泄漏的能力。是否有Valgrind用智能指针检测“内存泄漏”

我明白(我认为......),从最纯粹的意义上说,智能指针很少有真正的泄漏,如果有的话,它通常与循环引用有关。但是,我担心这会掩盖内存泄漏的问题,即“不需要和不必要的内存消耗”。例如,当使用传统的原始指针时,如果一个对象没有正确地清理内存,我们可以运行Valgrind,并且在程序结束时,任何剩下的东西都是泄漏的(通常这可能是一个泄漏,持续到在程序执行期间增长导致严重问题)。 。 。现在使用智能指针,这些全部在程序退出之前得到清理,并且Valgrind不会看到任何丢失的对分配内存的引用。

一般来说,我会看到智能指针在帮助开发人员防止泄漏方面的价值,然而我们是人为的并犯错误,这就是为什么我们有调试工具!

我们如何检测由于编程错误导致的不必要的内存增长,就像我们曾经能够使用Valgrind和原始指针一样?

...编辑

1) 愚蠢我通常与MEMCHECK Valgrind的关联,这就是我打算如何使用上面它。我很抱歉混淆。

2)作为此处的说明是一个例子:

考虑多线程应用程序,以处理数据。第一个线程读取输入(从磁盘或网络),然后将一个数据块传递给另一个线程,通过一个队列运行算法步骤1,Step1的线程从其输入队列中抓取数据,并将数据传递到步骤2。重复,直到最后的线程写出结果(到磁盘或网络)。处理完所有输入数据后,每个线程在完成最后一项并退出程序后自行终止。

现在在执行过程中,我们的脚印显着增长,假设我们可以像接收数据一样快速处理数据,那么必须有泄漏。使用我用来检测这种错误的原始指针与Memcheck,它会在程序结束时报告丢失或可能丢失的内存块,我们可以追踪并修复这些内存块。

3)在我们急于学习和应用智能指针时,我们可能使用“shared_ptr”作为另一种类型,可能更适合我们的应用程序。

+3

我不明白为什么valgrind不会工作。如果您有泄漏意味着资源不会自动清理,并且应该能够被检测到。 –

+0

因为当智能指针丢失范围时它会自动销毁。当创建它的对象失去范围时可能会发生这种情况。如果一个对象持续整个运行时间(如表示一个线程及其输入/输出要处理的数据队列)并且由于错误而导致内存消耗增加,则智能指针在程序退出时仍会被销毁,并且valgrind不会注意损失。 –

+1

我不确定可能会发生智能指针API设置的方式。如果你有一个很好看的例子。 –

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值