C Valgrind和释放特殊指针数组
我有一个哈希表存储实现,它存储一个typedef结构的Entry,还有一个函数查询整个表,查看条目的数据是否匹配一组特定的条件。我实现这一点的方式是服务器 条目**queryReturns=tableQueryparams 为了调用函数,函数为要返回的入口指针数组分配内存 在tableQuery函数中:C Valgrind和释放特殊指针数组,c,arrays,malloc,valgrind,C,Arrays,Malloc,Valgrind,我有一个哈希表存储实现,它存储一个typedef结构的Entry,还有一个函数查询整个表,查看条目的数据是否匹配一组特定的条件。我实现这一点的方式是服务器 条目**queryReturns=tableQueryparams 为了调用函数,函数为要返回的入口指针数组分配内存 在tableQuery函数中: Entry **tableQuery(params) { //Process params and get expected results Entry **returnEntr
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);
因为我不想删除我正在存储的实际数据元素,所以我只想取消分配这个入口指针的临时数组,但是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)
我应该担心这会导致内存泄漏,还是应该忽略这一点
我应该担心这会导致内存泄漏吗
是:这是一个明确的内存泄漏,你应该担心它
不幸的是,您没有告诉我们该行:
Entry **returnEntries = (Entry *)malloc(j * sizeof(Entry *));
是分配行表。c:798,Valgrind抱怨
如果是,那么至少有一个tableQuery的调用者实际上没有像它应该的那样释放返回的数组。查看tableQuery代码或文档,检查如何释放由它分配的内存。//将指针复制到数组中的代码哪些指针?tableQuery是我自己创建的函数。指针指的是指向与查询匹配的数据元素的指针。该函数返回这些元素的数组,以便服务器可以直接访问该转换的数据元素。这不应该是条目**malloc…?不,实际上不应该有演员阵容