2015-06-29 144 views
3

说,我有以下两个结构定义在C分配结构指针分配/释放动态数组用C

struct child { 
int x; 
}; 

struct Yoyo { 
struct child **Kids; 
}; 

我将如何去分配为孩子们的记忆。

说例如我有一些函数Yoyo_create()。

static struct Yoyo * yoyo_create() { 

int n = 32000; 

struct Yoyo *y; 

y = malloc(sizeof(*Yoyo)); 

y->Kids = malloc(n*sizeof(*Child)); 

for (i = 0 ; i < n ; i ++) { y->Kids[i] = NULL; } 

} 

然后摧毁孩子在一些“析构函数”我会这样做。

void yoyo_destroy(struct yoyo *y) 
{ 
free(y->Kids); 
free(y); 
} 

这有道理吗?

+0

'sizeof'需要一个类型名称或所需类型的表达式。你的'malloc(sizeof(* Yoyo))'应该可能是'mallof(sizeof(struct Yoyo))'或'malloc(sizeof(* y))','sizeof(* Child)'应该是'sizeof struct child)'... – Dmitri

+1

@Dmitri'sizeof(struct Child *)' – BLUEPIXY

回答

2

因为你y保存它的孩子的结构,你不需要这些线路

y->Kids = malloc(n*sizeof(*Child)); and <br> 
free(y->Kids); 

。除了这些,你正在进行中

0

y = malloc(sizeof(struct Yoyo));

y-> Kids = malloc(n * sizeof(struct Child));

+0

我认为'struct child *' – BLUEPIXY

+0

那么不会为一个指针分配内存,那将会是4个字节吗? – johnslay