[英]Dynamically Allocating Memory to an array of Struct Nodes
我试图创建一个结构数组,动态分配内存,
这是我正在使用的结构定义:
struct node {
int key;
double probability;
struct node *parent;
struct node *children[255];
};
这是声明和初始化:
int base_nodes = sizeof(X)/sizeof(*X);
while ((base_nodes - 1)%(D-1) != 0){
printf("Incrementing base\n");
base_nodes++;
}
printf("base_nodes:\t%d\n", base_nodes);
struct node **nodes = malloc(base_nodes * sizeof(struct node));
if (nodes) {
printf("Size of nodes:\t%llu\n", sizeof(nodes));
} else { printf("Failed to allocate memory\n"); return 1;}
其中X是我在此处调用之前定义的另一个动态分配的数字数组。
AFAIK,base_nodes正在正确计算,但是节点的大小:报告8而不是10.我已经尝试了小于8的base_nodes,它也返回8。
有人能解释为什么会这样吗? 以及如何正确地做到这一点?
我正在制作的程序是一个给定PMF的D-ary霍夫曼代码生成器。
我还试图在程序中重新分配,它似乎没有效果:
nodes = realloc(nodes, ((sizeof(nodes) + 1) * sizeof(struct node)));
if (nodes) {
printf("New size:\t%llu\n", sizeof(nodes));
} else { printf("Not enough memory\n"); }
您正在尝试使用指针本身上的运算符sizeof()
来获取动态分配的struct node
类型的元素数,这将只返回计算机上指针的大小,这似乎是8个字节是64位机器。 我觉得你很困惑的事实是,当你在数组中静态分配一些内存时,你可以使用sizeof()运算符来返回分配的元素数,即
myType a[N];
number_of_elements = sizeof(a)/sizeof(myType)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.