[英]Memory leak with unsigned char *
我有一個方法,我返回unsigned char *
:
- (unsigned char *)calledMethod {
...
unsigned char *result = (unsigned char*) calloc(size * 4, sizeof(unsigned char));
...
return result;
}
問題是,當我調用這個方法時:
unsigned char *myVariable = [myClass calledMethod];
我得到了內存泄漏。
我該如何釋放記憶?
我已經嘗試過free(myVariable)
,但沒有用。 如果我在我的calledMethod
方法中調用free(result)
,就不會有泄漏,但是我無法返回它。 提前致謝!
編輯:
問題是,我存儲了myVariable
UIImage的像素數據(每個CGPoint
4個組件:rgba)。 我必須修改一些像素並重建圖像。 我正在訪問這樣一個點的數據:
int byteIndex = (bytesPerRow * point.y) + point.x * bytesPerPixel;
CGFloat red = (myVariable[byteIndex] * 1.0) / 255.0;
CGFloat green = (myVariable[byteIndex + 1] * 1.0) / 255.0;
CGFloat blue = (myVariable[byteIndex + 2] * 1.0) / 255.0;
CGFloat alpha = (myVariable[byteIndex + 3] * 1.0) / 255.0;
如果我使用NSMutableData
,那么[NSMutableData dataWithBytes:(const void *) length:(NSUInteger)]
的length
參數是什么?我將如何修改給定CGPoint
的數據?
free()
是調用以釋放內存的正確函數。 如果你仍然有內存泄漏,你要么根本沒有調用free()
,要么就是你沒有調用它。 例如,以下內容會泄漏:
myVariable = [foo calledMethod];
// some stuff
myVariable = [foo calledMethod];
// more stuff
free(myVariable);
我可能會建議你使用NSMutableData ,而不是像這樣使用原始緩沖區。 這樣,您將獲得您正在使用的任何Objective-C內存管理方法的好處。
你在做什么是正確的。 您返回一個malloc-ed內存塊,您將其分配給myVariable
,然后使用free(myVariable)
釋放它。 您向我們展示的代碼不對泄漏負責。 也許它在於...
? 靜態分析告訴你什么?
呼喚free
,當你完成會回收內存。 當你嘗試調用free(myVariable)
時,你確定你正確地檢測了一些東西嗎? 這應該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.