A link
是一个指向节点的指针
typedef struct node * link;
在 main() 中,我有以下代码(config->m 只是一些整数):
// array of pointers to structs
link heads[config->m];
// make memory for head nodes
for(i = 0; i < config->m; i++)
heads[i] = malloc(sizeof(struct node));
该代码有效(这很棒)。但有什么办法可以分配config->m
没有循环的内存片段? I tried
link heads[config->m];
heads = malloc(sizeof(struct node) * config->m);
但我友好的邻居编译器告诉我incompatible types in assignment
我知道我可以使用
struct node heads[config->m];
但我想用指针来做这些事情。
一如既往,有人会问我这是否是家庭作业的一部分,答案是肯定的(某种程度上)。但是这段特定的代码与实际的分配没有任何关系;这是为了我自己的启蒙。但感谢您的询问:|
不,你需要循环。您的 heads 数组本质上是一个二维数组。您至少需要两次分配。第一个是指针数组:
link * heads = (link*)malloc (config->m * sizeof (link));
第二个是 Heads 数组的每个成员指向的内存:
link buf = (link)malloc(sizeof(struct node) * config->m);
for(i = 0; i < config->m; i++)
heads[i] = &buf[i];
然后取消分配:
free(heads);
free(buf);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)