相关疑难解决方法(0)

Valgrind:可能会失去被视为绝对迷失的对待?

我可以将Valgrind memcheck的输出"可能丢失"视为"绝对丢失"吗?

可能丢失或"可疑":找到指向块内部的指针.指针可能最初指向开头并且已经移动,或者它可能完全不相关.Memcheck认为这样的块是"可疑的",因为不清楚它的指针是否仍然存在.

绝对丢失或"泄露":最糟糕的结果是没有找到指向该块的指针.该块被归类为"泄露",因为程序员不可能在程序退出时释放它,因为没有指向它的指针.这可能是在程序的某些早期点丢失指针的症状

valgrind

33
推荐指数
1
解决办法
2万
查看次数

为什么valgrind无法检测到由于重新分配而导致的这种内存泄漏?

我不明白为什么valgrind(版本3.14)没有在此程序中检测到可能的内存泄漏:

#include <stdlib.h>

int main() {
  int *p = malloc(sizeof(int));
  p = realloc(p, 2 * sizeof(int));

  free(p);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

C99标准(ISO / IEC 9899:1999,第314页)表示以下内容realloc

如果无法分配用于新对象的内存,则不会释放旧对象,并且其值不变。[...] realloc函数返回指向新对象的指针(该值可能与指向旧对象的指针的值相同),如果无法分配新对象,则返回null指针。

因此,它可能发生的pNULL,但与以前分配的存储单元malloc仍然存在,不应该这是一个可能的内存泄漏?

如果我使用编译程序gcc -std=c99并执行valgrind,--tool=memcheck --leak-check=full --track-origins=yes则会显示以下消息:

#include <stdlib.h>

int main() {
  int *p = malloc(sizeof(int));
  p = realloc(p, 2 * sizeof(int));

  free(p);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c valgrind memory-leaks realloc dynamic-memory-allocation

2
推荐指数
1
解决办法
69
查看次数