2014-04-04 45 views
1

我有一個哈希表存儲實現與商店一個typedef結構的條目,並有一個函數,查詢整個表,以查看條目的數據是否符合一組特定的條件。我實現了這個問題的方法是服務器,以調用函數利用Valgrind和釋放特殊數組指針

Entry **queryReturns = tableQuery(params);

和功能項指針數組返回分配內存。

(在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) 

我應該擔心這會導致內存泄漏,還是應該忽略它?

+0

查看'tableQuery()'代碼或文檔,並檢查如何釋放由其分配的內存。 – Rohan

+0

「* //將指針複製到數組中的代碼*」哪些指針? – alk

+0

tableQuery是我自己創建的函數。這些指針指向指向與查詢匹配的數據元素的指針。該函數返回這些數組,以便服務器可以直接訪問數據元素。投下的 – anarian

回答

0

我應該擔心這導致內存泄漏

是:這是一個明確的內存泄漏,你應該擔心。

不幸的是,你沒有告訴我們這是否行:

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

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

如果是,則至少有一個調用者tableQuery()事實上不是它應該返回的數組。