我有一个简单的结构:
typedef struct {
int width, height;
unsigned char *pixels;
} image;
哪个 API 更好?
image *imagecreate(int w, int h) {
image *img = malloc(sizeof(image));
img->width = w;
img->height = h;
img->pixels = calloc(w * h, 3);
return img;
}
void imagefree(image *img) {
free(img->pixels);
free(img);
}
或者
image imagecreate(int w, int h) {
image img;
img.width = w;
img.height = h;
img.pixels = calloc(w * h, 3);
return img;
}
void imagefree(image *img) {
free(img->pixels);
img->width = img->height = 0;
}
?
为这样一个小结构做一个额外的 malloc() 似乎有点矫枉过正,它只是一个指向真正动态分配数据的指针的包装器。但另一方面,在值类型中隐藏指向动态分配内存的指针(对我而言)感觉不自然。人们可能会认为您不必释放它。