在编程中,Kernighan& amp; Ritchie说你为“malloc”分配的所有空间都称之为“免费”。
所以下面的代码是正确的:
- (UIImage*) convertImage:(UIImage*)sourceImage {
unsigned char *rawData = malloc(requiredSpace);
...
...
free(rawData);
return imageRef;
}
但是你也在函数中有封装。因此从函数返回后,内存将自动释放。因此理论上,在上面的例子中并不是绝对需要free。这是对的吗?
答案 0 :(得分:4)
绝对没有。
free
是必需的,因为仅为静态分配的变量释放内存。如果您使用malloc
(以及calloc
或realloc
),您将动态分配不会被释放的内存,除非您明确调用free
。
例如:
-(void)method {
char a[10];
char *b = (char*) malloc(10*sizeof(char));
}
a
将在范围的末尾被销毁(至少会被标记为空闲内存,因此您不能再依赖其内容),而b
将保留在内存中,直到该计划结束。如果丢失了指向该内存地址的指针(可能为b
分配了另一个值,或者只是在不返回b
的情况下结束该函数),那么您将无法释放内存,这将带来内存泄漏。