[英]Error (incompatible types) when initialising struct array
我已經讀過類似的問題,但仍然看不到我要去哪里。
我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
初始化其中的i < 9
。 將其更改為i < 10
或額外信用,將兩者換成#define NUMBER_OF_CANS 10
您已經聲明了一個TinCan
結構的數組,但是循環表明您需要一個指向TinCan
結構的指針的數組。
將canArray的聲明更改為:
TinCan *canArray[] = malloc(10 * sizeof(TinCan*));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.