C 编译器错误:分配给';结构';从类型';void*';马洛克期间

C 编译器错误:分配给';结构';从类型';void*';马洛克期间,c,multidimensional-array,malloc,C,Multidimensional Array,Malloc,编辑——投票人能解释一下吗?我有一个明确的问题,有支持的证据和先前调查的证据。我想知道你为什么投票反对我 我在使用gcc编译时遇到此错误: 错误:从类型“void*”分配给类型“struct cell”时,类型不兼容 问题是: struct cell* cells = NULL; cells = malloc(sizeof(struct cell) * length); for (i = 0; i < length; i++) { cell

编辑——投票人能解释一下吗?我有一个明确的问题,有支持的证据和先前调查的证据。我想知道你为什么投票反对我


我在使用gcc编译时遇到此错误:

错误:从类型“void*”分配给类型“struct cell”时,类型不兼容

问题是:

    struct cell* cells = NULL;
    cells = malloc(sizeof(struct cell) * length);
    for (i = 0; i < length; i++) {
            cells[i] = malloc(sizeof(struct cell) * width);
struct cell*cells=NULL;
单元=malloc(sizeof(结构单元)*长度);
对于(i=0;i

我相信我已经遵循了正确的协议,如上所述。我缺少什么?

对于多维数组,您需要类型为
struct cell**cells的数组:

struct cell** cells = NULL;
cells = malloc(sizeof(struct cell*) * length);
for(int i = 0; i < length; i++) {
  cells[i] = malloc(sizeof(struct cell)*width);
}
struct cell**cells=NULL;
单元=malloc(sizeof(struct cell*)*长度);
for(int i=0;i
现在,
单元格
是一个多维数组,其中第一个索引范围是长度,第二个索引范围是宽度。

malloc()
始终返回类型为
void*
的指针,您需要键入cast

要为单个元素分配内存,请执行以下操作:

struct cell*new=(struct cell*)malloc(sizeof(struct cell));//这将分配内存和new is指针

要访问数据成员,请执行以下操作:

new->member_name=value;//点(.)运算符不起作用,因为new是指针而不是标识符

要为阵列分配内存,请执行以下操作:

struct cell*base=(struct cell*)malloc(sizeof(struct cell)*length);//这将分配内存,而base是数组的基

要访问数据成员,请执行以下操作:


base[i].MexBuxNe=值;//当访问数组的元素时,->运算符不工作。< /代码> < / P>你不需要双指针吗?@ AOLKStavy是的,他试图把“代码”> MalOC 的输出指定给循环内的结构值。此外,C++是C.C++的严格超集,不是C.@ HeavyLoad的严格超集:我确定但是,C++不是一个严格的C超集,都是不同语言标准的不同语言。请停止传播这个谎言。老实说,这是纯粹的非语言。@ HeyYL光:G+命令是GCC的一部分,它决定从源文件名的扩展中编译什么语言;与C和C++语言之间的关系有关。<代码> G++-C Fo.ADB< /Cord>将编译<代码> Fo.Ab为艾达(如果安装Gnat),C++不同于C,不允许分配<代码> Value>代码> >不带抛出的不同指针类型的C++。C++是一个与此代码中的代码直接相关的C结构超集。第一个<代码> Malc C < /Calp>行是有效的C和非法C++。使用数组指针创建一个数组。您可以使用指针数组创建一个类似多维数组的数据结构(更灵活,更需要管理您自己的内存)。@KeithThompson是指数组的另一种数据结构,该数组由如下命令生成:
struct cell*cells=malloc(sizeof(struct cell)*length*width);
?@d0rmLife我上面的代码给你的是一个指向数组的指针数组。
struct cell*cells=malloc(sizeof(struct cell)*length*width)
给你一个一维数组,但它可以用
单元格[i*width+j]的行来索引
@d0rmLife:部分。要模拟这样的2D数组,您需要为指针数组(每个元素指向2D数组的一行)和每行分配内存。除了类型错误之外,基本上您在问题代码中所做的是什么。