当我尝试为我的int结构malloc内存时,我得到了这个错误。
typedef struct _values {
random ints;
} values;
我已尝试过以下几行,但我的编译器并不喜欢它。如何修复错误?
values v;
v = malloc(sizeof(values));
答案 0 :(得分:6)
您忘记在values
之后和v
之前添加星号(*)以将其标记为指针:values *v;
现在设置它的方式,v(没有星号)被定义为堆栈变量,并且将在堆栈上分配并在函数结束后丢弃。它的类型只是values
。
malloc
用于在堆上分配内存并返回指向内存的指针。正弦函数无法知道它将其作为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));