我有以下代码,我需要为char data[]
分配内存。我尝试了很多事情,但是还是行不通。有人可以帮我吗?我知道我的malloc
不会为数据分配任何东西,而是如何修复它。
我想分配这样的数据:
img->data = malloc(sizeof(char)*(img->xsize * img->ysize * 3));
但是不能更改结构
struct ppm {
unsigned xsize;
unsigned ysize;
char data[];
};
struct ppm *img = malloc(sizeof(struct ppm));
if (!img) {
fprintf(stderr, "Chyba alokace pameti.\n");
exit(1);
}
if (fscanf(fp, "%x %x", &img->xsize, &img->ysize) != 2) {
fprintf(stderr, "Spatna velikost obrazku '%s'\n", filename);
exit(1);
}
if (fread(img->data, 3 * img->xsize, img->ysize, fp))
fprintf(stderr, "Nepodarilo se nacist pixely z '%s'\n", filename);
exit(1);
}
答案 0 :(得分:1)
(请注意,您的代码中缺少一些'{')
在
struct ppm {
unsigned xsize;
unsigned ysize;
char data[];
};
struct ppm *img = malloc(sizeof(struct ppm));
您没有空间在数据中放入内容,因此fread(img->data, 3 * img->xsize, img->ysize, fp)
将从已分配的块中写出
使用 realloc 来增加 img 的大小,请
img = realloc(img, sizeof(ppm) + 3 * img->xsize * img->ysize);
之前
if (fread(img->data, 3 * img->xsize, img->ysize, fp))
警告:
if (fread(...) != 3 * img->xsize * img->ysize)
。请注意检查 fread 的结果是否为0不足以确保您已全部阅读,因为即使这不是错误,也可能您没有全部阅读