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

时间:2016-05-04 14:44:26

标签: c arrays memory-management struct

我正在尝试使用动态分配的内存创建一个结构数组

这是我使用的结构定义:

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"); }

1 个答案:

答案 0 :(得分:0)

您正在尝试获取动态分配的struct node类型元素的数量,使用指针本身上的运算符sizeof(),这将只返回指针的大小机器,这是8字节,因为它似乎是64位机器。 我认为你很困惑的事实是,当你在数组中静态分配一些内存时,可以使用sizeof()运算符来返回分配的元素数,即

myType a[N];

number_of_elements = sizeof(a)/sizeof(myType)