所以我想优化我的记忆在我的代码管理。Malloc和免费的功能(优化你的记忆)
下面的代码的示例:
Image image;
int main(int argc, char *argv[])
{
image = (Image) malloc(sizeof (struct image));
image = doSomething(image);
}
Image doSomething(Image imageInput) {
Image imageResult;
imageResult = (Image) malloc(sizeof (struct image));
//Code does something here
return imageResult;
}
当它是适当的使用免费的();在我的例子?
Image image;
int main(int argc, char *argv[])
{
image = (Image) malloc(sizeof (struct image));
image = doSomething(image);
free(image);
}
Image doSomething(Image imageInput) {
Image imageResult;
imageResult = (Image) malloc(sizeof (struct image));
//Code does something here
free(imageInput);
return imageResult;
}
唯一一次我可以看到是supossed在功能被复制和被假设函数结束之后要被擦除的“imageInput”变量。
释放函数变量是矫枉过正吗?
也在应用程序执行结束时。
*您不能*'free'函数变量:您可以将其与功能的'malloc'家庭只分配'free'内存。无论如何,当你退出函数时,函数变量的生命结束。 –
[请参阅此讨论,为什么不在'C'中为malloc()'和family生成返回值。](http://stackoverflow.com/q/605845/2173917)。 –
通过(大概)定义一个指向图像类型的指针,你不清楚你正在分配什么,以及有多少。 'image =(image)malloc(sizeof(struct image));''''''''因为您已经使用了'image' *和*'struct image',所以''看起来很吝啬,并且您是否只为'pointer'分配足够的内存还不清楚。定义指针类型的做法很糟糕。 –