错误:从“void *”类型分配类型“值”时出现不兼容的类型?

时间:2012-05-19 06:50:06

标签: c

当我尝试为我的int结构malloc内存时,我得到了这个错误。

typedef struct _values {
random ints;
} values;

我已尝试过以下几行,但我的编译器并不喜欢它。如何修复错误?

values v;
v = malloc(sizeof(values));

3 个答案:

答案 0 :(得分:6)

您忘记在values之后和v之前添加星号(*)以将其标记为指针:values *v;

现在设置它的方式,v(没有星号)被定义为堆栈变量,并且将在堆栈上分配并在函数结束后丢弃。它的类型只是valuesmalloc用于在堆上分配内存并返回指向内存的指针。正弦函数无法知道它将其作为void *类型返回的类型 - 这会给你错误 - 你试图将void *类型分配到struct类型,编译器无法做到的,编译器也找不到可以解决问题的合法演员。

答案 1 :(得分:3)

在这种情况下,您不需要malloc内存;行values v;已经分配了内存(“在堆栈上”)。离开当前范围时,它将自动释放。

如果你真的想在堆上分配内存,那么它会持续超过当前作用域,你需要v作为指针;那就是:

values *v;
v = malloc(sizeof(values));

完成后请记得free

答案 2 :(得分:2)

values v;

这是在堆栈上分配的结构的实例。

v = malloc(sizeof(values));

malloc返回一个void*指针,编译器不允许您为实例分配指针。

你需要声明一个指针,然后为它指定malloc返回指针。

某种东西

    值* v = NULL;

v = malloc(sizeof(values));