我已经读过类似的问题,但仍然看不到我要去哪里。

我分配了指针,这似乎可以正常工作,但是在此行上出现错误(不兼容的类型):

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

10-04 16:26