【问题标题】:valgrind definitely lost block calling functionvalgrind 肯定丢失了块调用函数
【发布时间】:2017-07-05 13:02:28
【问题描述】:

我无法弄清楚为什么我在以下代码中肯定会丢失错误。我已在 main 函数中将 return 0 更改为 exit (0) ,但它没有帮助。

struct s* function(int K,struct graph *G,int c){
    uint32_t *a;
    a=(uint32_t*)calloc(K+2,sizeof(uint32_t));
    int *b;
    b=(uint32_t*)calloc(K+2,sizeof(uint32_t));
    return s;
}

int main(int argc, char *argv[])
{
    struct S* s=function(K,Gprime,capacity);
    return 0;
}

下面可以看到S结构代码:

struct S{
    int *S;
    uint32_t *Scount;
};

struct S* Sp(int s,int k){
    struct S* sz =malloc(sizeof (struct S));
    sz->S = (int*)calloc(s+1, sizeof(int));
    sz->scount=(uint32_t*)calloc(k+1,sizeof(uint32_t));
    return sz;
}

这是 valgrind 错误:

==5343== 680 bytes in 5 blocks are definitely lost in loss record 10 of 52
==5343==    at 0x4C272B8: calloc (vg_replace_malloc.c:566)
==5343==    by 0x40106B: function (reflowk.c:3)
==5343==    by 0x402BB0: main (reflowk.c:9)

【问题讨论】:

    标签: c memory-leaks valgrind


    【解决方案1】:

    您必须调用free() 释放由malloccalloc 保留的内存,在您使用完该内存后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多