首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Valgrind内存泄漏日志

Valgrind内存泄漏日志
EN

Stack Overflow用户
提问于 2014-06-13 17:05:52
回答 1查看 462关注 0票数 0

在valgrind中,我们有这样的泄漏日志

代码语言:javascript
运行
复制
==15788== 480 bytes in 20 blocks are definitely lost in loss record 5,016 of 5,501    

==20901== 112 (48 direct, 64 indirect) bytes in 2 blocks are definitely lost in loss record 3,501 of 5,122 

==20901== 1,375,296 bytes in 78 blocks are possibly lost in loss record 5,109 of 5,122

==20901== Conditional jump or move depends on uninitialised value(s)    

==20901== Use of uninitialised value of size 8

在Valgrind的文档中,我找不到确切的细节。有没有人能解释一下

我知道这绝对意味着丢失--分配的内存根本没有被释放。但它可以是什么意思的"20块“和它的意思是”损失记录5,016的5,501“。如果它说丢失了480个字节,这是指循环中的一次运行还是总共..

在第二行中,“两个块中的112 (48个直接,64个间接)字节肯定丢失了”,"48个直接,64个间接“是什么意思?

我理解“可能丢失”的含义,但这是否意味着valgrind不确定这是否是泄漏?

至于第四行,我一点也不知道。我检查了与第四行一起提供的调用堆栈。我没有注意到任何“跳跃或移动”。

对于第5行,它表示未初始化的在此代码片段的最后一行。我在这里没有看到任何未初始化的值。

代码语言:javascript
运行
复制
char *data = new char[somebigSize];
memset(data, '\0', somebigSize);
int sizeInt = sizeof(int);
int length = 20; //some value obtained
int position = 10; 
char *newPtrVar = new char[sizeInt + 1];
memset(newPtrVar, '\0', sizeInt + 1);
memcpy(newPtrVar, &length, sizeInt);
memcpy(&data[position], newPtrVar, sizeInt);
EN

回答 1

Stack Overflow用户

发布于 2017-07-17 23:37:38

valgrind manual详细介绍了这一点。这是相当复杂的-请参阅完整的细节链接,但本质上你可以:

  • “仍然可达”(指针指向的内存)。直接丢失“
  • ”(没有指向的内存是任何实时丢失的内存)(由内存中的指针指向的内存,该内存是"directly lost)
  • "possibly
  • “(指向,但指针不指向内存的起始位置的内存)。

最后一种情况可能是一些随机指针,也可能是内存管理器在内存返回给用户之前分配一个redzone。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24201561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档