[英]Memory leak in char pointer
具體來說,我的程序使用了指向char的指針。 該程序本身運行平穩,但是每個循環我泄漏大約8kb的數據。 我發現,我的錯誤在於使用這些char指針的風格。 它是這樣的:
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內存?如果我沒有分配它,而只是輸入它,我可以釋放它嗎?”
不應該釋放字符串文字 ,因為它們不是動態分配的。 泄漏不在於示例代碼中。 從C ++ 03,§5.13.4-1字符串文字開始:
普通字符串文字的類型為“ n
const char
數組”和靜態存儲持續時間(3.7)[...]寬字符串文字的類型為“ nconst wchar_t
數組”並且具有靜態存儲持續時間
沒有泄漏。 如果您不使用new
分配內存,則除非明確聲明,否則您沒有責任delete
它。 通常,分配內存的人都有責任釋放它。 也就是說,許多受歡迎的圖書館中仍然存在漏洞。 如果char*
是在堆上動態分配的數組或類似數組,則需要從分配它的位置刪除它(不在這些函數中)。
問候,
丹尼斯·M。
代碼中還有另一個問題。 我創建了一個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()或任何釋放器;
請發布您的完整代碼,以便我們查找問題。
另外,您可能要檢查:
Draw("C:\a.bmp", "C:\b.bmp")
“ \\”轉義為“ a”或“ b”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.