取消引用指向不完整类型的指针

时间:2010-09-10 17:04:38

标签: c pointers

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 个答案:

答案 0 :(得分:6)

我常常经常误解typedef,直到我开始认为它有两个部分:类型 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 * */

答案 1 :(得分:2)

您的struct的名称需要与typedef匹配:

struct Handle_t {
    /* ... */
};

答案 2 :(得分:1)

typedef struct Handle_t Handle

您定义的结构称为Handle,而不是Handle_t,这就是您要进行的类型编排。

答案 3 :(得分:1)

typedef struct Handle_t Handle

键入已定义的结构Handle_t to Handle,但结构为Struct Handle,因此要么将struct Hadle更改为Struct handle_t,要么键入def。

答案 4 :(得分:1)

struct Handle_t未在编译器到达带错误的行时定义。

您已定义struct Handle并将类型Handle别名为不存在的类型struct Handle_t。可以在C中为很多东西提供不存在的类型,但不能用于sizeof参数。