Valgrind丢失零字节

mbq*_*mbq 7 valgrind memory-leaks

当Valgrind报告o字节丢失时,这意味着什么,就像这里:

==27752== 0 bytes in 1 blocks are definitely lost in loss record 2 of 1,532
Run Code Online (Sandbox Code Playgroud)

我怀疑它只是一个创造性使用的神器malloc,但确定是好的( - ;

编辑:当然真正的问题是它是否可以被忽略,或者它是一个有效的泄漏,应该通过释放这些缓冲区来解决.

Emp*_*ian 13

是的,这是一个真正的泄漏,应该修复.

当你malloc(0),malloc可能会给你NULL,或一个保证与任何其他对象的地址不同的地址.

既然您可能在Linux上,那么您将获得第二个.分配的缓冲区本身没有浪费空间,但是libc必须做一些内务处理,这确实浪费了空间,所以你不能malloc(0)无限期地继续做.

你可以用以下方法观察它:

#include <stdio.h>
#include <stdlib.h>
int main() {
  unsigned long i;
  for (i = 0; i < (size_t)-1; ++i) {
    void *p = malloc(0);
    if (p == NULL) {
      fprintf(stderr, "Ran out of memory on %ld iteration\n", i);
      break;
    }
  }
  return 0;
}

gcc t.c && bash -c 'ulimit -v 10240 && ./a.out'
Ran out of memory on 202751 iteration
Run Code Online (Sandbox Code Playgroud)