为什么我会收到错误:分配中的不兼容类型?

时间:2013-06-28 22:49:19

标签: c

我正在尝试从位图文件中读取标头。当我编译时,我得到以下错误;对于执行“bmp_header_p = bmp-> header;”的行,“错误:赋值中的不兼容类型”。我在这里做错了什么?

struct _bmpfile {
  bmp_header_t header;
  bmp_dib_v3_header_t dib;

  rgb_pixel_t **pixels;
  rgb_pixel_t *colors;
};

typedef struct _bmpfile bmpfile_t;

bool
bmp_get_header_from_file(FILE *filename, bmpfile_t *bmp)
{
        bmp_header_t *bmp_header_p;
        bmp_header_p = bmp->header;

        fseek(filename, 0L, SEEK_SET);
        bmp_header_p = malloc(sizeof(bmp->header));

        if(14 != fread(bmp_header_p, sizeof(char), 14, filename)) {
                perror("message");
                return FALSE;
        } else {
                return TRUE;
        }   
} 

1 个答案:

答案 0 :(得分:3)

struct _bmpfile {
  bmp_header_t header;
  bmp_dib_v3_header_t dib;

  rgb_pixel_t **pixels;
  rgb_pixel_t *colors;
};

这个“标题”不是指针。

bmp_header_t *bmp_header_p;

这是。编译器正在抓紧你,因为你试图将非指针的东西分配给指针。这些类型不同。

查看你的代码,你根本不需要或者想要这个赋值,你甚至不需要malloc,假设你的bmp对象已经被调用者分配了:

bool
bmp_get_header_from_file(FILE *filename, bmpfile_t *bmp)
{
        fseek(filename, 0L, SEEK_SET);

        if(sizeof(bmp_header_t) != fread(&bmp->header, sizeof(bmp_header_t), sizeof(char), filename)) {
                perror("message");
                return FALSE;
        } else {
                return TRUE;
        }   
}