Malloc和免费的功能(优化你的记忆)
问题描述:
所以我想优化我的记忆在我的代码管理。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”变量。
释放函数变量是矫枉过正吗?
也在应用程序执行结束时。
答
你必须制定有关使用你的图像处理功能的习惯。我不认为你的榜样是坏的。但我认为你可以做得更好。
这是唯一的例子,但我认为你可以做这样的事情:
struct image *img_alloc()
{
return malloc(sizeof(struct image));
}
void img_free(struct image **a)
{
free(*a);
*a = NULL;
}
struct image **img_add(struct image **dstp, struct image const *lhs, struct image const *rhs)
{
struct image *dst = img_alloc();
...
img_free(dstp);
*dstp = dst;
return dstp;
}
int main(int argc, char *argv[])
{
struct image *img = NULL;
...
img_add(&img, a, b);
...
img_add(&img, img, c);
...
img_add(&img, *img_add(&img, img, a), b);
...
img_free(&img);
return 0;
}
*您不能*'free'函数变量:您可以将其与功能的'malloc'家庭只分配'free'内存。无论如何,当你退出函数时,函数变量的生命结束。 –
[请参阅此讨论,为什么不在'C'中为malloc()'和family生成返回值。](http://*.com/q/605845/2173917)。 –
通过(大概)定义一个指向图像类型的指针,你不清楚你正在分配什么,以及有多少。 'image =(image)malloc(sizeof(struct image));''''''''因为您已经使用了'image' *和*'struct image',所以''看起来很吝啬,并且您是否只为'pointer'分配足够的内存还不清楚。定义指针类型的做法很糟糕。 –