2012-03-28 78 views
1

我有一個調用數千次,我已經注意到,它是唯一可能地方內存泄漏C函數。我使用Valgrind和Totalview的MemoryScape檢查泄漏,但他們什麼也沒說,但是當應用程序在AIX 6.1上運行時,會出現一個逐漸泄漏的情況。字符串文字造成小內存泄漏?

注:我使用的是「無泄漏」 SAP RFC SDK對於這一點,又假託的發展,他們說我使用的lib是100%無泄漏...所以它是不是...

代碼大致是如下,被稱爲成千上萬的每一個小時時間....

int writeMessage(message msg){ 
... 
... 
header = ItCreate("HEADER", HEADER_LEN, 0, 0); 
body = ItCreate("DATA", DATA_LEN, 0, 0); 
... 
... 
ItDelete(it_header); 
ItDelete(it_body); 
... 
} 

難道那些字符串文字像「頭」和「數據」是導致我的小漏洞?愚蠢的問題,但我寧願要求安全。

會有什麼區別,如果我宣佈他們在這種特殊情況下常數?

感謝您的幫助,非常感謝

+0

您粘貼的代碼的一小部分看起來很好。沒有理由去改變它。 – 2012-03-28 19:03:47

+0

你確定這是泄漏?不只是更多的內存正在消耗?蜇文字不會導致泄漏沒有。 – mattjgalloway 2012-03-28 19:04:38

+0

命名(header vs it_header)略有不同,但我們可以認爲這是一個錯字嗎?順便說一句:你怎麼知道*有一個內存泄漏。只看頂部的Vsize? – wildplasser 2012-03-28 19:06:11

回答

1

字符串文字本身不分配或釋放內存,因此不能泄漏。

聲明他們const不會改變任何東西。你的問題在別處。

1

難道那些字符串文字像「頭」和「數據」是導致我 小量泄漏?

沒有。

2

號字符串文字具有靜態存儲時間等其存儲先於程序啓動和保留它的壽命是該程序的整個執行。

+1

看起來像一個波浪downvotes的剛發生;) – ouah 2012-03-28 19:36:09

3

答案是,但它取決於ItCreate做什麼。粘貼ItCreate功能代碼。

+0

這個函數是SAP RFC SDK裏面...沒有訪問那...... – 2012-03-29 06:38:25