我有一个哈希表存储实现,其中存储了一个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)
我是否应该担心导致内存泄漏,或者我应该忽略这个?
答案 0 :(得分:0)
我是否应该担心这会导致内存泄漏
是的:这是一个确定的内存泄漏,你应该担心它。
不幸的是,你没有告诉我们这行:
Entry **returnEntries = (Entry *)malloc(j * sizeof(Entry *));
是Valgrind抱怨的分配线(Table.c:798
)。
如果是,那么tableQuery()
的至少一个调用者实际上并不像它应该那样free
返回的数组。