Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Valgrind和释放特殊指针数组_C_Arrays_Malloc_Valgrind - Fatal编程技术网

C Valgrind和释放特殊指针数组

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

我有一个哈希表存储实现,它存储一个typedef结构的Entry,还有一个函数查询整个表,查看条目的数据是否匹配一组特定的条件。我实现这一点的方式是服务器

条目**queryReturns=tableQueryparams

为了调用函数,函数为要返回的入口指针数组分配内存

在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);
因为我不想删除我正在存储的实际数据元素,所以我只想取消分配这个入口指针的临时数组,但是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…?不,实际上不应该有演员阵容