私は単純な構造を持っています:
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() を実行するのはやり過ぎのようです。しかし一方で、動的に割り当てられたメモリへのポインターを値型内に隠すのは (私にとっては) 不自然に感じます。解放する必要はないと考えることができます。