如何为结构,结构内部的结构数组正确分配内存,并将该数组作为参数传递

时间:2014-09-12 06:45:26

标签: c arrays pointers struct

我离C很远,当我潜入它时,我发现自己遇到了障碍。我有以下结构:

typedef struct{
      char id;
      struct S *children[SIZE];
}S;

在我的代码中,我最初声明了一个结构数组......

 struct S arr[SIZE];

但是当我到达这一点时,试图将我的第一个孩子分配给我的第一个成员......

 arr[0].children[0] = (S*)malloc(sizeof(S));

我收到此警告:警告:内置函数'malloc'警告的不兼容隐式声明:从不兼容的指针类型分配[默认启用]

除此之外,我收到一个对我来说听起来不合逻辑的错误。我有以下功能:

int foo(S *children[SIZE]);

但是当我打电话给这条线路时......

foo(arr[0].children);

我得到这个注释:注意:预期'struct S **'但参数类型为'struct S **' 这对我来说只是听起来很愚蠢,它期待它正在得到的争论,并对此感到不安。

非常感谢任何帮助,解释我应该做些什么来正确分配这个记忆并达到同样的想法。

2 个答案:

答案 0 :(得分:4)

没有struct S,只有S这是匿名结构的typedef

定义struct S

typedef struct S {
  char id;
  struct S *children[SIZE];
}S;

或者:

typedef struct S S;
struct S {
  char id;
  S *children[SIZE];
};

do avoid casting return of malloc in C

arr[0].children[0] = malloc(sizeof(S));

答案 1 :(得分:1)

对于您的第一个问题,您需要执行以下操作:

#include <stdlib.h>

位于您的计划顶部,以便成功致电malloc

第二个问题(正如其他人所指出的)是,类定义中的struct S引用的结构与S不同。在C中,struct标签与类型名称位于不同的“名称空间”中。