3

当我尝试为我的整数结构分配一些内存时,我收到了这个错误。

typedef struct _values {
random ints;
} values;

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

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

3 回答 3

6

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

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

于 2012-05-19T06:53:26.993 回答
3

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

如果您真的想在“堆上”分配内存,以便它在当前范围之外持续存在,您需要v成为一个指针;那是:

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

完成后记住free它。

于 2012-05-19T06:53:24.120 回答
2

values v;

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

v = malloc(sizeof(values));

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

您需要声明一个指针,然后将 malloc 返回指针分配给它。

类似的东西

值 *v = NULL;

v = malloc(sizeof(values));

于 2012-05-19T06:56:44.587 回答