0

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

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 *â

有什么建议吗?

4

3 回答 3

3

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

temp->command[i] = malloc( sizeof *temp->command[i] );
于 2013-07-02T17:58:53.313 回答
1

你需要这样做

for(i=0;i<2;i++)
   temp->command[i] = malloc(sizeof(struct command[i]));
于 2013-07-02T16:36:53.917 回答
0

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

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 is an array of ...”而不是“myvar is a pointer to ...”开头,因为 [] 的优先级高于 *。)

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

于 2013-07-02T20:29:40.510 回答