c - malloc 结构指针数组

标签 c arrays pointers struct malloc

我有以下结构:

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

我有:

typedef struct _chess *Chess;

现在,我想创建一个动态长度数组来存储指向国际象棋结构的指针,因此我执行以下操作:

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

这给了我一个错误:无效的初始值设定项。

如果我放下 [] 并执行此操作:

Chess array = malloc(size * sizeof(Chess));

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

array[i]=NULL;

我收到一个错误:从类型“void *”分配给类型“struct _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. */

关于c - malloc 结构指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10811439/

相关文章:

c - 从 C 中的套接字文件描述符读取时如何检测分隔符?

c# - DllExport:将数组数组从 Delphi 传递到 C#

c - 如何优雅地退出 X11 事件循环?

c - 存储(和打印)整数的最大数据类型是什么?

java - 以某种方式打印出数组

c# - LinQ:C# 在使用一些过滤器复制时对数组进行排序

c - 这两个 C 声明有什么区别

c - 如何从 C 函数返回指针?

c++ - C++中箭头和点运算符在不同情况下的解释

c - 如何将$$、$1、$2...bison伪变量的类型改为GMP变量