分配指向struct数组的指针时出错

时间:2013-07-02 16:32:39

标签: c malloc

我正在尝试为指向struct数组的指针分配内存,但它给了我一个奇怪的错误。这是代码:

struct command{
    int type;
    char* input;
    char* output;
    struct command *command[2];
}

当我尝试为数组大小2分配内存时,我尝试:

temp->command = (command*)malloc(sizeof(struct command[2]));

但是,我收到了这个错误:

incompatible types when assigning to type âstruct command *[2]â from type âstruct command *â

任何建议?

3 个答案:

答案 0 :(得分:3)

您已将command声明为指向struct command类型的指针的2元素数组,因此您无需为数组分配内存,仅针对每个数组元素,如下所示:

temp->command[i] = malloc( sizeof *temp->command[i] );

答案 1 :(得分:1)

你需要这样做

for(i=0;i<2;i++)
   temp->command[i] = malloc(sizeof(struct command[i]));

答案 2 :(得分:0)

如果您希望元素是指向struct数组的指针,那么您可以像这样声明和分配...

struct command (*command)[2]; /* note the parentheses */

temp->command = malloc(sizeof *temp->command);

...如果你想让元素成为一个指针数组,那么你可以这样做:

struct command *command[2]; /* equivalent to *(command[2]) */

temp->command[0] = malloc(sizeof *temp->command[0]);
temp->command[1] = malloc(sizeof *temp->command[1]);

(注意,确定“指针数组”与“数组指针”的好方法是从变量名称向外工作,由运算符优先级和关联性规则引导。例如,如果您的声明是“sometype” * myvar [2]“你会从”myvar开始是......的数组“而不是”myvar是指向...的指针“,因为[]的优先级高于*。)

错误消息是因为您的演员表明type-&gt;命令是指向struct的指针,这是一个冲突,因为您将其声明为struct的指针数组。但是,除非使用C ++编译器,否则不需要进行强制转换。