簡體   English   中英

char指針中的內存泄漏

[英]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)[...]寬字符串文字的類型為“ n const 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM