草庐IT

c++ - Valgrind 没有抛出错误,但并非所有堆分配都已被释放

coder 2024-02-20 原文

这是我用 Valgrind 执行我的程序后得到的:

1    jscherman@jscherman:~/ClionProjects/algo2-t4-tries$ g++ Set.hpp tests.cpp DiccString.hpp && valgrind --leak-check=yes --show-leak-kinds=all ./a.out                      
2    ==6823== Memcheck, a memory error detector
3    ==6823== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
4    ==6823== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
5    ==6823== Command: ./a.out
6    ==6823== 
7    test_empty_dicc...ok
8    test_copy_constructor...ok
9    test_define_defined...ok
10    test_get..ok
11    test_remove...ok
12    test_remove_tiny...ok
13    test_keys...ok
14    ==6823== 
15    ==6823== HEAP SUMMARY:
16    ==6823==     in use at exit: 72,704 bytes in 1 blocks
17    ==6823==   total heap usage: 282 allocs, 281 frees, 275,300 bytes allocated
18    ==6823== 
19    ==6823== 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1
20    ==6823==    at 0x4C2DC10: malloc (vg_replace_malloc.c:299)
21    ==6823==    by 0x4EC3EFF: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21)
22    ==6823==    by 0x40104E9: call_init.part.0 (dl-init.c:72)
23    ==6823==    by 0x40105FA: call_init (dl-init.c:30)
24    ==6823==    by 0x40105FA: _dl_init (dl-init.c:120)
25    ==6823==    by 0x4000CF9: ??? (in /lib/x86_64-linux-gnu/ld-2.23.so)
26    ==6823== 
27    ==6823== LEAK SUMMARY:
28    ==6823==    definitely lost: 0 bytes in 0 blocks
29    ==6823==    indirectly lost: 0 bytes in 0 blocks
30    ==6823==      possibly lost: 0 bytes in 0 blocks
31    ==6823==    still reachable: 72,704 bytes in 1 blocks
32    ==6823==         suppressed: 0 bytes in 0 blocks
33    ==6823== 
34    ==6823== For counts of detected and suppressed errors, rerun with: -v
35    ==6823== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

输出的最后一行显示,似乎没有泄漏。然而,我们也有这一行:

17    ==6823==   total heap usage: 282 allocs, 281 frees, 275,300 bytes allocated

我没有任何错误,但仍然有一个分配没有被释放,这是怎么回事?我的程序有问题还是 Valgrind 在幕后做了什么?

最佳答案

valgrind 报告的回溯表明,有问题的内存分配是在应用程序加载的共享库之一的初始化函数中进行的,显然是 C++ 库本身。

对于共享库来说,一次性分配各种零碎的数据是很常见的,但是当它们被卸载时却懒得显式地释放它们。

这不包括您自己的代码中的内存泄漏。

valgrind 带有一个已知的这种性质的分配列表,它被称为“抑制列表”,其明确目的是抑制关于这些已知的一次性分配的报告。

但是,偶尔,这些抑制列表确实会遗漏一个或两个分配。

关于c++ - Valgrind 没有抛出错误,但并非所有堆分配都已被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39928404/

有关c++ - Valgrind 没有抛出错误,但并非所有堆分配都已被释放的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  4. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  5. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  6. Ruby Koans about_array_assignment - 非平行与平行分配歧视 - 2

    通过ruby​​koans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John

  7. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  8. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  9. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  10. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

随机推荐