我有以下结构:

typedef struct _chess {
   int **array;
   int size;
   struct _chess *parent;
} chess;

我有:
typedef struct _chess *Chess;

现在,我想创建一个动态长度数组来存储指向chess结构的指针,因此我执行以下操作:
Chess array [] = malloc(size * sizeof(Chess));

这给了我一个错误:无效的初始值设定项。
如果我放下[]然后这样做:
Chess array = malloc(size * sizeof(Chess));

它编译时没有错误,但当我尝试通过执行以下操作将此数组的元素设置为空时:
array[i]=NULL;

我得到一个错误:当从类型“void*”分配给类型“struct\u chess”时,类型不兼容
知道我做错了什么吗?
谢谢。

最佳答案

array是一个有点误导性的名字。对于动态分配的指针数组,malloc将返回指向内存块的指针。您需要使用Chess*而不是Chess[]来保存指向数组的指针。

Chess *array = malloc(size * sizeof(Chess));
array[i] = NULL;

也许以后:
/* create new struct chess */
array[i] = malloc(sizeof(struct chess));

/* set up its members */
array[i]->size = 0;
/* etc. */

10-08 13:30