初始化struct数组时出错(不兼容的类型)
我已经读过一些类似的问题,但我仍然看不出我出错的地方。
我malloc指针,似乎工作正常,但我在这一行得到一个错误(不兼容的类型):
canArray [i] = (TinCan *) malloc(sizeof(TinCan))
这是完整的代码:
typedef struct TinCan { int date; int time; } TinCan; int main () { int i; TinCan *canArray = malloc(10 * sizeof(TinCan)); for (i =0; i < 9; i++ ) { canArray [i] = (TinCan *) malloc(sizeof(TinCan)); } }
猜测你有一个typedef struct {...} TinCan;
在某处,然后在这里:
TinCan *canArray = malloc(10 * sizeof(TinCan));
你有足够的空间容纳10个TinCan
结构,但在这里:
canArray [i] = (TinCan *) malloc(sizeof(TinCan));
您正在尝试为另一个TinCan
结构分配空间。
你想要:
-
一系列的
TinCan
? 如果是这样,你不需要循环 – 当你要求10 * sizeof(TinCan)
时已经分配了空间 -
一组指向
TinCan
结构的指针? 如果是这样,请将第一行更改为:TinCan **canArray = malloc(10 * sizeof(canArray[0]));
并保持循环。
一些一般性意见:
-
在
malloc()
调用之前你不需要malloc()
– 请参阅 – 我是否转换了malloc的结果? -
使用
sizeof(varname[0])
而不是sizeof(typename)
是一种好习惯,可以避免(或更明显地)犯下愚蠢的错误。 -
使用当前循环代码,您将保留最后一个
TinCan
未初始化 – 您在canArray
创建了10个条目,但仅在i < 9
初始化其中的9个条目。 将其更改为i < 10
或额外信用,将两者换成#define NUMBER_OF_CANS 10
你已经声明了一个TinCan
结构数组,但你的循环建议你需要一个指向TinCan
结构的指针数组。
将canArray的声明更改为:
TinCan *canArray[] = malloc(10 * sizeof(TinCan*));