разыменование указателя на неполный тип - PullRequest
0 голосов
/ 10 сентября 2010

gcc 4.4.4 c89

Не знаю, почему я получаю эту ошибку.

В моем заголовочном файле есть следующее

handle.h

typedef struct Handle_t Handle

В моем файле реализации

handle.c

struct Handle {
    size_t id;
    char *name;
};

Handle* create_handle(size_t id)
{
    Handle *hdev = NULL;
    hdev = malloc(sizeof(*hdev)); /* Error */
    .
    .
}

Большое спасибо за любые предложения,

Ответы [ 5 ]

6 голосов
/ 10 сентября 2010

Я часто ошибался в typedef, пока не начал думать о нем как о двух частях: type и def . Сначала введите , затем def с новым именем.

typedef <type> <name>;
typedef struct Handle Handle_t; /* defines Handle_t as struct Handle */
typedef char *c_string;         /* defines c_string as char * */
2 голосов
/ 10 сентября 2010

Имя вашей структуры должно соответствовать typedef:

struct Handle_t {
    /* ... */
};
1 голос
/ 10 сентября 2010

struct Handle_t не определяется, когда компилятор достигает строки с ошибкой.

вы определили struct Handle и присвоили типу Handle несуществующий тип struct Handle_tC нормально иметь несуществующие типы для многих вещей, но не для аргумента sizeof.

1 голос
/ 10 сентября 2010

typedef struct Handle_t Handle

вы вводите определенную структуру Handle_t в Handle, но структура - это Struct Handle, поэтому либо измените struct Hadle на Struct handle_t, либо введите def.

1 голос
/ 10 сентября 2010
typedef struct Handle_t Handle

Структура, которую вы определили, называется Handle, а не Handle_t.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...