在 OSX 上,Valgrind 报告此内存泄漏,它来自哪里?

2024-01-30

在 OSX 上,Valgrind 报告此内存泄漏,它来自哪里?该代码是用 g++ 作为 c++ 代码编译的(我这样做是为了函数重载)。



==13088== 18 bytes in 1 blocks are definitely lost in loss record 82 of 264
==13088==    at 0x1F25DC: malloc_zone_malloc (vg_replace_malloc.c:267)
==13088==    by 0xA1AEDA: malloc_set_zone_name (in /usr/lib/system/libsystem_c.dylib)
==13088==    by 0xA1B4A7: _malloc_initialize (in /usr/lib/system/libsystem_c.dylib)
==13088==    by 0xA1B5DD: malloc_good_size (in /usr/lib/system/libsystem_c.dylib)
==13088==    by 0x4EFA6E: __CFStringChangeSizeMultiple (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x4F3900: CFStringAppend (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x506F91: _convertToURLRepresentation (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x60F963: _CFURLInit (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x4FF268: CFURLCreateWithFileSystemPathRelativeToBase (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x4FF8EE: CFURLCreateWithFileSystemPath (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x515735: _CFBundleGetMainBundleAlreadyLocked (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x515663: CFBundleGetMainBundle (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x539533: cacheBundleInfo (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x5394B3: _CFAppVersionCheckLessThan (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x56C35B: __CFInitialize (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==13088==    by 0x8FE11243: ImageLoaderMachO::doImageInit(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==13088==    by 0x8FE10CB3: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==13088==    by 0x8FE0E21F: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld)
==13088==    by 0x8FE0E1B5: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld)
==13088==    by 0x8FE0F1BF: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld)
==13088==    by 0x8FE03655: dyld::initializeMainExecutable() (in /usr/lib/dyld)
==13088==    by 0x8FE07EF1: dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**) (in /usr/lib/dyld)
==13088==    by 0x8FE012EE: dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*) (in /usr/lib/dyld)
==13088==    by 0x8FE01062: _dyld_start (in /usr/lib/dyld)
==13088==    by 0xFFF: ???
  

编辑:另外,我将如何释放这段内存?


分配完全不受您的控制;免费对你来说同样是不可能的。这应该被添加到已知、检测到、记录但被忽略的项目列表中(行话是“抑制”)。

当我在 MacOS X 10.7.2 上的 valgrind 3.7.0 下运行程序时,我得到如下摘要:

==71989== 
==71989== HEAP SUMMARY:
==71989==     in use at exit: 6,191 bytes in 33 blocks
==71989==   total heap usage: 33 allocs, 0 frees, 6,191 bytes allocated
==71989== 
==71989== LEAK SUMMARY:
==71989==    definitely lost: 0 bytes in 0 blocks
==71989==    indirectly lost: 0 bytes in 0 blocks
==71989==      possibly lost: 0 bytes in 0 blocks
==71989==    still reachable: 6,191 bytes in 33 blocks
==71989==         suppressed: 0 bytes in 0 blocks
==71989== Rerun with --leak-check=full to see details of leaked memory
==71989== 
==71989== For counts of detected and suppressed errors, rerun with: -v
==71989== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 1 from 1)

这是来自一个没有显式内存分配的程序 -printf()可能会触发一些分配,但大部分字节是在系统库中分配的。您显然为回溯设置了比正常值更深的值(--num-callers=N).

查看手册如何正确添加抑制记录,但是valgrind --help offers:

--num-callers=<number>    show <number> callers in stack traces [12]
--error-limit=no|yes      stop showing new errors if too many? [yes]
--error-exitcode=<number> exit code to return if errors found [0=disable]
--show-below-main=no|yes  continue stack traces below main() [no]
--suppressions=<filename> suppress errors described in <filename>
--gen-suppressions=no|yes|all    print suppressions for errors? [no]

所以,你可以获得valgrind生成抑制字符串以添加到文件中,然后在后续运行中使用。

Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 OSX 上,Valgrind 报告此内存泄漏,它来自哪里? 的相关文章

随机推荐

  • Java OCR 库有推荐吗? [复制]

    这个问题在这里已经有答案了 我需要检查大量图片 看看它们是否有关键字 谁能推荐一个好的 可靠的 OCR 库 我很乐意牺牲速度来换取准确性 没有纯 Java OCR 库具有与准确性有关的事情 https stackoverflow com q
  • Microsoft 桌面搜索 - 包含在 Windows Server 2008 上不返回结果

    我正在尝试搜索远程文件共享 运行 Windows Server 2008 R2 对于包含一些文本的文件 如果我尝试这样做 效果很好 SELECT System FileName FROM RemoteServer SystemIndex W
  • 在 TensorFlow 中,有什么方法可以初始化未初始化的变量吗?

    TensorFlow 中初始化变量的标准方法是 init tf initialize all variables sess tf Session sess run init 经过一段时间的学习后 我创建了一组新的变量 但是一旦初始化它们 它
  • window.opener 不对

    我正在打开一个弹出窗口 并希望在其中执行单击操作 从而在打开它的页面中执行一些 jQuery 我在网上找到的所有内容都表明我应该能够使用 window opener 做到这一点 例如JQuery 写入开启器窗口 https stackove
  • jQueryeach() 闭包 - 如何访问外部变量

    从 each 中访问 this rules 变量的最佳方法是什么 任何关于原因 方式的解释也会有帮助 app Style function node this style node this rules var ruleHolder nod
  • 为什么perl配置VC-WIN64A后没有ms\do_ms.bat?

    我正在使用 Visual Studio 2015 编译 OpenSSL 我已经安装了 Windows 10 上的 Visual Studio 2015 ActivePerl 5 24 0 2400 MSWin32 x64 300558 na
  • 如何在不使用非 api 类的情况下取消 Java 中的 Files.copy() ?

    我正在下载一个文件Files copy method Files copy in Paths get targetZipFile StandardCopyOption REPLACE EXISTING 如果下载很慢我想取消它 我在 stac
  • gcov 在当前目录中创建 .gcov 文件。有什么办法可以改变这个吗?

    我在 RHEL 上运行 gcov gcc 4 1 2 当我想为 gcov 文件指定目录时 关于如何做到这一点有什么想法吗 从您想要创建其文件的目录运行 gcov 你必须使用 o参数告诉它在哪里查找 gcno gcda 文件 看gcov 的文
  • 是什么让 SPI 比 I2C 协议更快 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我了解 I2C 和 SPI 通信的基础知识 因为两者都是同步协议 我想知道是什么让 SPI 比 I2C 更快 如果我没记错的话 使用 I2
  • Docker:理解ENTRYPOINT和CMD指令

    我想问一些关于ENTRYPOINT and CMD可在 Dockerfile 中使用的说明 Providing that I m mounting local directories as volumes in a container us
  • 如何检查我当前是否在主屏幕上

    是否可以检查我的应用程序当前是否处于后台并且主屏幕是否已启动 没有 API 可以知道主屏幕是否正在显示 但是 您可以使用各种 Activity 生命周期回调 onStop 等 知道您的应用程序何时发送到后台
  • 为什么未装箱的数组不是可折叠的实例?

    在 Haskell 中找出要使用的正确数据容器可能有点棘手 对于我认为使用的 2D 网格应用程序UArray会是合适的 然而 据我所知UArray不是一个实例foldable 不在Data Array IArray nor Data Arr
  • Flutter SQFlite 一对多关系设置

    我正在创建一个应用程序并需要一个数据库 该数据库包含位置表和兴趣点表 这是一对多的关系 一个位置有多个兴趣点 现在我尝试用 sqflite 在 flutter 中建立这种关系 但失败了 我已经尝试添加外键 但没有成功 这只是代码中最重要的部
  • RecyclerView ViewHolder 内部 ConstraintLayout 的性能

    在过去的两天里 我一直在尝试分类为什么我的 RecyclerView 在滚动时速度如此之慢 并且我已将其范围缩小到我用于行的 ConstraintLayout 在 Android 上使用 GPU 分析器会显示绿色 蓝绿色条一直到屏幕顶部 表
  • 使用 XmlSlurper 解析(非常)大的 XML 文件

    我对 Groovy 有点陌生 我正在尝试使用 XmlSlurper 读取一个 相当 大的 XML 文件 超过 1Gb 由于它不构建整个 DOM 因此它应该能够在处理大文件时产生奇迹 在记忆中 尽管如此 我还是不断收到 OutOfMemory
  • 在 PL/pgSQL 函数中拆分逗号分隔的字符串

    我正在尝试编写一个函数 该函数将 ID 作为输入并更新该给定 ID 上的一些字段 到目前为止 它看起来像这样 CREATE FUNCTION update status p id character varying p status cha
  • 如何在 Laravel 中解密哈希密码

    我用谷歌搜索了很多 但不幸的是没有找到有效的解决方案 我知道这是一种糟糕的技术 但我需要通过电子邮件向用户发送密码 我已设法发送用户哈希密码 但我无法解密该密码 以下是我正在使用的程序 results DB select select fr
  • 将 postgreSQL 存储过程作为一个事务执行

    我正在使用 PostgreSQL 9 3 并且创建了一些包含多个语句的存储过程 我在准备好的语句的帮助下在 Java 应用程序中调用此存储过程 现在我读到存储过程中的每个语句都作为一个事务执行 即每个语句后一次提交 但我想要的是将整个存储过
  • nginx WordPress URL 重写

    我刚刚安装了 nginx 1 0 8 和 php fpm 在过去 30 分钟里我试图重写 WordPress 的 URL WordPress URL 应如下所示 http localhost website blog 2011 10 sam
  • 在 OSX 上,Valgrind 报告此内存泄漏,它来自哪里?

    在 OSX 上 Valgrind 报告此内存泄漏 它来自哪里 该代码是用 g 作为 c 代码编译的 我这样做是为了函数重载 13088 18 bytes in 1 blocks are definitely lost in loss rec