4

我有一个返回的方法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),但没有用。如果我调用free(result)我的calledMethod方法,就不会有泄漏,但是我不能返回它。提前致谢!

编辑:

问题是,我将myVariableUIImage 的像素数据存储在其中(每个CGPoint:rgba 有 4 个组件)。我必须修改一些像素并重建图像。我正在访问这样一个点的数据:

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;

如果我使用NSMutableDatalength参数是什么,我将[NSMutableData dataWithBytes:(const void *) length:(NSUInteger)]如何修改给定的数据CGPoint

4

3 回答 3

7

free()是调用释放内存的正确函数。如果你仍然有内存泄漏,你要么根本没有调用,要么free()调用的不够多。例如,以下内容会泄漏:

myVariable = [foo calledMethod];
// some stuff
myVariable = [foo calledMethod];
// more stuff
free(myVariable);

我是否可以建议,不要使用像这样的原始缓冲区,而是使用NSMutableData。这样,您将受益于您正在使用的任何 Objective-C 内存管理方法。

于 2013-04-22T09:15:30.727 回答
2

你在做什么是正确的。您返回分配给的 malloc-ed 内存块,myVariable然后使用free(myVariable). 您向我们展示的代码不对泄漏负责。也许它在于...?静态分析告诉你什么?

于 2013-04-22T09:11:08.940 回答
1

完成后调用free将释放内存。你确定你在尝试调用时正确地检测了东西free(myVariable)吗?那应该行得通。

于 2013-04-22T09:10:09.077 回答