【问题标题】:Zero bytes lost in ValgrindValgrind 中丢失零字节
【发布时间】:2011-07-26 18:50:22
【问题描述】:

Valgrind 报告 o 字节丢失是什么意思,如下所示:

==27752== 0 bytes in 1 blocks are definitely lost in loss record 2 of 1,532

我怀疑这只是创造性地使用 malloc 的产物,但最好确定一下 (-;

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

【问题讨论】:

    标签: memory-leaks valgrind


    【解决方案1】:

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

    当你malloc(0) 时,malloc 可以是give you NULL, or an address that is guaranteed to be different from that of any other object

    由于您很可能使用 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
    

    【讨论】:

      【解决方案2】:

      看起来您分配了一个大小为 0 的块,但随后没有释放它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-30
        • 1970-01-01
        • 2016-08-28
        • 1970-01-01
        • 2011-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多