当初始化结构数组时出现错误(不兼容的类型)
问题描述:
我已经阅读了一些类似的问题,但我仍然无法看到我要出错的地方。当初始化结构数组时出现错误(不兼容的类型)
我的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()
呼叫前投 - 见 - Do I cast the result of malloc?它使用
sizeof(varname[0])
很好的做法,而不是,以避免(或更明显)愚蠢的错误。与电流回路代码,您将离开最后
TinCan
未初始化 - 你在canArray
创建10个条目,但只有初始化其中9i < 9
。更改为i < 10
,或额外的信用,换出一个#define NUMBER_OF_CANS 10
答
你有声明了一个TinCan
结构体的数组,但是你的循环表明你需要一个指向TinCan
结构体的指针数组。
变化canArray的声明:
TinCan *canArray[] = malloc(10 * sizeof(TinCan*));
谢谢,我明白了。如果我现在要将该数组传递给初始化方法,它会是这样吗? intitialise(canArray **)?这不适合我。 – Dawson 2013-05-01 06:46:38
没关系。你可以有一个函数初始化一个数组或一个指针数组。我可能会采用第一种方法(指向10个TinCan的指针),因为代码会更清晰。 – 2013-05-01 06:48:43
此外,重要的是要记住,数组和指针是不一样的 - 如果这听起来很混乱,请阅读http://c-faq.com/aryptr/aryptr2.html – 2013-05-01 06:50:52