簡體   English   中英

初始化struct數組時出錯(不兼容的類型)

[英]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結構分配空間。

你想要:

  1. TinCan的數組? 如果是這樣,你不需要循環 - 當你要求10 * sizeof(TinCan)時已經分配了空間

  2. 一組指向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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM