2017-07-05 16 views
-1

次のコードで間違いなくエラーが発生する理由を知ることに問題があります。私はmain関数でreturn 0をexit(0)に変更しましたが、それは役に立ちません。valgrindは明らかにブロック呼び出し関数を失いました

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) 

答えて

2

あなたがmallocで確保したメモリを解放するためにfree()を呼び出す必要がありますそのメモリの使用を終了した後はcallocとなります。

関連する問題