簡體   English   中英

內存泄漏與unsigned char *

[英]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.

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