Valgrind和解除分配特殊指针数组

时间:2014-04-04 05:11:04

标签: c arrays malloc valgrind

我有一个哈希表存储实现,其中存储了一个Entry的typedef结构,并且有一个函数可以查询整个表,以查看条目的数据是否与特定条件集匹配。我实现这个的方式是服务器利用

Entry **queryReturns = tableQuery(params);

为了调用该函数,该函数为返回的Entry指针数组分配内存。

(在tableQuery函数中:)

Entry **tableQuery(params) {
    //Process params and get expected results
    Entry **returnEntries = (Entry *)malloc(j * sizeof(Entry *));
    //Code to copy pointers into the array
    return returnEntries;
}

当服务器功能完成时,我应该只用

解除分配
free(queryReturns);

由于我不想删除我存储的实际数据元素,我只想释放这个临时的Entry指针数组,但是Valgrind会产生这样的消息:

205,816 bytes in 96 blocks are definitely lost in loss record 17 of 17
    at 0x4C28BED: malloc (vg_replace_malloc.c:263)
    by 0x4086D1: tableQuery (Table.c:798)
    by 0x403808: handle_command (server.c:645)
    by 0x403F05: threadCall (server.c:799)
    by 0x52B3B4F: start_thread (pthread_create.c:304)

我是否应该担心导致内存泄漏,或者我应该忽略这个?

1 个答案:

答案 0 :(得分:0)

  

我是否应该担心这会导致内存泄漏

是的:这是一个确定的内存泄漏,你应该担心它。

不幸的是,你没有告诉我们这行:

Entry **returnEntries = (Entry *)malloc(j * sizeof(Entry *));

是Valgrind抱怨的分配线(Table.c:798)。

如果是,那么tableQuery()的至少一个调用者实际上并不像它应该那样free返回的数组。

相关问题