与 void* 类型不兼容的类型
Posted
技术标签:
【中文标题】与 void* 类型不兼容的类型【英文标题】:Incompatible type from type void* 【发布时间】:2022-01-11 09:18:22 【问题描述】:我正在尝试 malloc 结构 customerInformation。但是,我不断收到“错误:从类型‘void *’分配给类型‘struct CustomerInformation’时不兼容的类型”。我的声明中缺少什么?任何帮助,将不胜感激。谢谢。
struct CustomerInformation *result=malloc(sizeof(struct CustomerInformation)*100000);
for(int i=0;i<n;i++)
result[i]=malloc(sizeof(struct CustomerInformation));
【问题讨论】:
那是因为result[i]
存储了一个值,但是malloc
返回了一个指针void *
您已经为 100000 struct CustomerInformation
分配了内存。然后没有必要尝试分配每个单独的结构,除非您的结构很大并且您需要在主数组中存储指针而不是值(在这种情况下,result
的类型是错误的)。你在那个循环中应该做的是初始化每个元素的实际数据。
【参考方案1】:
result[i]
的类型为 struct CustomerInformation
(不是指针),但您分配的是 void *
(指针)。
如果你想要一个指向结构数组的指针:
struct CustomerInformation *result = malloc(sizeof(struct CustomerInformation*) * 100000);
for(int i=0;i<n;i++)
result[i].cust_id = ...;
一大块内存,包含 100000 个 CustomerInformation 结构。
如果你想要一个指向结构指针数组的指针:
struct CustomerInformation **result = malloc(sizeof(struct CustomerInformation*) * 100000);
for(int i=0;i<n;i++)
result[i] = malloc(sizeof(struct CustomerInformation));
result[i]->cust_id = ...;
一大块内存包含 100000 个指针,加上 n
较小的每个包含一个 CustomerInformation 结构体。
【讨论】:
以上是关于与 void* 类型不兼容的类型的主要内容,如果未能解决你的问题,请参考以下文章
使用类型表达式初始化 'void(^)(struct ALAssetsGroup *, BOOL *)' 的不兼容块指针类型
将“void”发送到不兼容类型“UIViewController”的参数
不兼容的类型:条件表达式 void 中的错误类型无法转换为布尔值。请协助
指向整数转换的不兼容指针将“void *”发送到“PHImageContentMode”类型的参数(又名“枚举 PHImageContentMode”)