2015-05-24 4 views
3

Я не в состоянии выяснить, утечка памяти в моем коде
Мой Valgrind дает Где утечка памяти в этом коде?

==26373== HEAP SUMMARY: 
==26373==  in use at exit: 24 bytes in 1 blocks 
==26373== total heap usage: 7 allocs, 6 frees, 136 bytes allocated 
==26373== 
==26373== 24 bytes in 1 blocks are definitely lost in loss record 1 of 1 
==26373== at 0x4C2ABBD: malloc (vg_replace_malloc.c:296) 
==26373== by 0x400592: graph_init (in /media/goutam/CommonPartition/My Research/DataStructures/Graphs/main) 
==26373== by 0x40081D: main (in /media/goutam/CommonPartition/My Research/DataStructures/Graphs/main) 

И это код, где утечка памяти создается

/* 
* Allocates memory for graph,adjacency matrix and nodes 
*/ 
graph_t* graph_init(int n){ 
    graph_t *graph = malloc(sizeof(graph_t)); 
    graph->count_nodes = n; 

    /* Creating adjacency matrix and nodes of required size */ 
    graph->adjacency_matrix = malloc(sizeof(int*)*n); 
    graph->nodes = malloc(sizeof(struct Node*)*n); 


    int i; 
    for(i = 0 ; i < n; i++){ 
     // Allocating memroy for members of adjacency matrix and nodes 
     graph->adjacency_matrix[i] = malloc(sizeof(int)*n); 
     graph->nodes[i] = malloc(sizeof(struct Node)*n); 
     graph->nodes[i]->data = NULL; 
     graph->nodes[i]->id = i; 

    } 
    return graph; 
} 

/* 
* Frees memory for a node and stored data 
*/ 
static void deletenode(struct Node *node){ 
    free(node->data); 
    free(node); 
} 

/* 
* Frees memory for graph,adjacency matrix and nodes 
*/ 
void graph_destroy(graph_t *graph){ 
    int **adjacency_matrix = graph->adjacency_matrix; 
    struct Node **nodes = graph->nodes; 
    int i; 
    for(i = 0;i < graph->count_nodes;i++){ 
     free(adjacency_matrix[i]); 
     deletenode(nodes[i]);  
    } 
    free(adjacency_matrix); 
    free(nodes); 
} 

Все распределенной памяти освободил все еще утечку памяти. Я не могу понять, пожалуйста, помогите?

+0

Мне любопытно, почему вы бросаете 'malloc()' только один раз? Вы не должны этого делать. Также скомпилируйте с '-g3 -O0', и valgrind сообщит вам, какой указатель просочился, или где вы« malloc() 'it в исходном коде. –

+0

О! это было по ошибке –

+0

@iharob Я получаю такой же вывод valgrind –

ответ

6

Вы не освободили . По крайней мере, не в коде, который вы указали.

+0

О! Позор мне. Очень глупая ошибка. Я буду принимать ответ через 5 минут –

Смежные вопросы