我有一个结构元素
。当我尝试将元素数组初始化为 NULL
时,
我收到错误:从类型 void *
分配给类型 Element
时类型不兼容。
如何初始化void *
数组?
typedef struct _Element Element;
struct _Element {
void* data;
};
typedef struct _ArrayList ArrayList;
struct _ArrayList {
int size;
Element *elements;
};
int main() {
ArrayList *list;
list->size = 100;
list->elements = (Element*)calloc(sizeof(Element), list->size);
for (i = 0; i < list->size; i++) {
/*
* error: incompatible types when assigning to type
* ‘Element’ from type ‘void *’
*/
list->elements[i] = NULL;
}
}
最佳答案
首先,您从未为list
对象分配内存!您的 list
指针未初始化且指向任何地方。尝试对其应用 ->
运算符会导致未定义的行为。
我不知道你的最终意图是什么,但它应该是这样的
ArrayList *list = malloc(sizeof *list);
list->size = 100;
...
或
ArrayList list;
list.size = 100;
...
其次,您的 void *
指针实际上是 Element
结构中名为 data
的命名字段
for(i = 0; i < list->size; i++)
list->elements[i].data = NULL;
第三,因为您使用了calloc
,内存已经被“初始化”为全零位模式(包括您的数据
文件)。形式上,void *
中的这种位模式不能保证表示空指针,但在大多数平台上确实如此。
附言不要转换 calloc
list->elements = calloc(sizeof(Element), list->size);
或事件更好
list->elements = calloc(sizeof *list->elements, list->size);
关于c - 如何从 struct 初始化 void* 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32021596/