我正在尝试使用动态分配的内存创建一个结构数组
这是我使用的结构定义:
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 Huffman代码生成器。
我还试图在程序中重新分配,但似乎没有效果:
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"); }
答案 0 :(得分:0)
您正在尝试获取动态分配的struct node
类型元素的数量,使用指针本身上的运算符sizeof()
,这将只返回指针的大小机器,这是8字节,因为它似乎是64位机器。
我认为你很困惑的事实是,当你在数组中静态分配一些内存时,可以使用sizeof()运算符来返回分配的元素数,即
myType a[N];
number_of_elements = sizeof(a)/sizeof(myType)