繁体   English   中英

动态地将内存分配给结构节点数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM