初始化struct数组时出错(不兼容的类型)

时间:2013-05-01 06:33:09

标签: c arrays pointers

我已经阅读了一些类似的问题,但我仍然看不出我出错的地方。

我指向了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));
    }
}

2 个答案:

答案 0 :(得分:4)

猜测某处有typedef struct {...} TinCan;,然后在这里:

TinCan *canArray = malloc(10 * sizeof(TinCan));

你有足够的空间容纳10个TinCan结构,但在这里:

canArray [i] = (TinCan *) malloc(sizeof(TinCan));

您正在尝试为另一个TinCan结构分配空间。

你想要:

  1. 一组TinCan s?如果是这样,您不需要循环 - 当您要求10 * sizeof(TinCan)

    时,已经分配了空间
  2. 指向TinCan结构的指针数组?如果是这样,请将第一行更改为:

    TinCan **canArray = malloc(10 * sizeof(canArray[0]));
    

    并保持循环。


  3. 一些一般性意见:

    • 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*));