0

在编程中,Kernighan & Ritchie 引入了一条一般规则,即您已为“malloc”分配的所有空间调用“空闲”。

所以下面的代码是正确的:

- (UIImage*) convertImage:(UIImage*)sourceImage {
   unsigned char *rawData = malloc(requiredSpace);
   ...
   ...
   free(rawData);
   return imageRef;
}

但是,您也可以在函数中进行封装。所以从函数返回后,内存会自动释放。所以理论上免费在上面的例子中并不是绝对需要的。它是否正确?

4

1 回答 1

4

绝对没有。

free是必要的,因为内存只会为静态分配的变量释放。如果您使用malloc(以及callocrealloc),您将动态分配不会被释放的内存,除非您显式调用free.

例如:

-(void)method {

    char a[10];
    char *b = (char*) malloc(10*sizeof(char));

}

a将在作用域结束时被销毁(至少,将被标记为空闲内存,这样你就不能再依赖它的内容了),同时b保留在内存中直到程序结束。如果您丢失了指向该内存地址的指针(可能分配另一个值b或简单地结束函数而不返回b),您将无法再释放内存,这将导致内存泄漏。

于 2012-06-10T10:52:27.477 回答