我已经阅读了一些类似的问题,但我仍然看不出我出错的地方。
我指向了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));
}
}
答案 0 :(得分:4)
猜测某处有typedef struct {...} TinCan;
,然后在这里:
TinCan *canArray = malloc(10 * sizeof(TinCan));
你有足够的空间容纳10个TinCan
结构,但在这里:
canArray [i] = (TinCan *) malloc(sizeof(TinCan));
您正在尝试为另一个TinCan
结构分配空间。
你想要:
一组TinCan
s?如果是这样,您不需要循环 - 当您要求10 * sizeof(TinCan)
指向TinCan
结构的指针数组?如果是这样,请将第一行更改为:
TinCan **canArray = malloc(10 * sizeof(canArray[0]));
并保持循环。
一些一般性意见:
在malloc()
来电之前,您不需要演员 - 请参阅 - Do I cast the result of malloc?
最好使用sizeof(varname[0])
而不是sizeof(typename)
,以避免(或更明显)犯下愚蠢的错误。
使用当前循环代码,您将保留最后TinCan
未初始化的内容 - 您在canArray
中创建了10个条目,但仅使用i < 9
初始化其中的9个条目。将其更改为i < 10
,或者为了获得额外的赠送金额,将其换成#define NUMBER_OF_CANS 10
答案 1 :(得分:3)
您已声明了TinCan
个结构数组,但您的循环建议您需要一个指向TinCan
结构的指针数组。
将canArray的声明更改为:
TinCan *canArray[] = malloc(10 * sizeof(TinCan*));