2011-03-05 69 views
1

具體來說,我的程序使用指向char的指針。該程序本身運行平穩,但每個循環我泄漏約8kb的數據。正如我發現的,我的錯誤在於我使用這些字符指針的風格。它是這樣的:字符指針內存泄漏

Draw(char *what1, char* onWhat1); //this is declaration 
DrawAgain(char *what2, char* onWhat2); //declaration too 

// both take two directories to two images, so i call it like this: 

Draw("C:\a.bmp", "C:\b.bmp"){ 

//so what is pointer to a.bmp onWhat is pointer to b.bmp so i use them like this: 

DrawAgain(what1, onWhat1); 
} 

程序中沒有其他泄漏(我刪除了幾乎所有的東西以找出這個)。所以我的問題是:「我如何釋放這個* char內存?如果我沒有分配它,只需鍵入就可以釋放它。」

+2

這段代碼沒有泄漏,沒有任何東西可以免費使用。如果你有泄漏,它不在這個代碼中。 – nos 2011-03-05 21:41:26

+0

你可以添加'what1'和'onWhat1'的聲明嗎? – fouronnes 2011-03-05 21:47:09

+0

漏洞未在發佈代碼請發佈您的完整代碼 – 2011-03-05 21:48:54

回答

4

String literals不應該被釋放,因爲它們不是動態分配的。泄漏不在示例代碼中。從C++ 03,§5.13.4-1字符串文本:

一個普通字符串文字具有類型和靜態存儲持續時間(3.7)[...] A「的Ñconst char陣列」寬字符串文字的類型是「的ñconst wchar_t陣列」,並具有靜態存儲持續時間

0

有一個在代碼多一個問題。我創建了一個OpenCV的點,然後從函數返回值給它,它看起來像這樣:

CvPoint Value; 

bool Calculations(CvPoint &worker); //declaration 
//So i give this function Value and take it out like this: 
Calculations(Value){ 
worker = someValue; 
} 

值熄滅,但我不叫任何的free()或任何釋放器;

+0

請發佈您的完整代碼,讓我們有機會找到問題 – 2011-03-05 21:53:32

+1

SO使用問答形式,而不是論壇格式。只有回答問題的帖子應該發佈爲答案。這個信息應該放在問題中。現在編輯它並添加上面的信息,然後刪除它。 – outis 2011-03-05 21:54:36

1

沒有泄漏。如果您沒有使用new分配內存,除非另有明確說明,否則它不是您對delete的責任。一般來說,分配內存的人負責釋放內存。也就是說,許多流行的圖書館仍然存在泄漏。如果char*是一個在堆上動態分配的數組或類似數據,則需要將其從分配的位置(不在這些函數中)中刪除。

問候,
丹尼斯M.

0

請發表您的完整代碼,這樣我們就可以發現問題。你

可能還需要檢查:

Draw("C:\a.bmp", "C:\b.bmp") 

的 '\' 逃脫 'A' 相應的 'B'。