Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Valgrind内存泄漏日志_C++_Memory Leaks_Valgrind - Fatal编程技术网

C++ Valgrind内存泄漏日志

C++ Valgrind内存泄漏日志,c++,memory-leaks,valgrind,C++,Memory Leaks,Valgrind,在valgrind,我们有这样的泄漏记录 ==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

在valgrind,我们有这样的泄漏记录

==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个区块”是什么意思,以及“5501年的5016损失记录”是什么意思。如果它说丢失了480个字节,这是指循环中的一次运行还是总共

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

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

关于第四行,我完全不知道。我检查了第四行提供的调用堆栈。我没有注意到任何“跳跃或移动”

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

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);
本文详细介绍了这一点。这相当复杂-请参阅链接了解全部详细信息,但本质上您可以:

  • “仍然可访问”(指针指向的内存)
  • “直接丢失”(未指向任何活动指针的内存)
  • “间接丢失”(由“直接丢失”内存中的指针指向的内存)
  • “可能丢失”(指向的内存,但指针不指向内存的开头)

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

该代码段看起来不像是实际的代码段,更像是一个近似值。它是从我的代码中提取的,文件有15K行。我刚刚发布了valgrind显示的确切代码d未初始化值的用法。
它是从我的代码中提取的,文件有15K行。
然后将该块放入
main()中
函数,用已知值初始化这些未知值,然后运行一个简单的程序。如果这个简单的程序没有产生这些问题,那么是你没有发布的14K+代码导致了这些问题。另外,为什么还要编写这样的代码?为什么不使用更安全的结构,例如
std::vector
std::string
,等等?@PaulMcKenzie好的,Paul会的,但是你能解释一下valgrind日志的其他行吗