我已经读过类似的问题,但仍然看不到我要去哪里。
我分配了指针,这似乎可以正常工作,但是在此行上出现错误(不兼容的类型):
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()
调用之前不需要强制转换-请参见-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