malloc for struct

时间:2017-12-03 14:00:25

标签: c malloc

我正在处理我的程序,它从外部.txt file加载数据 - 它是3个整数的结构。现在我正在努力分配内存的功能。我想为9个成员(108字节)的结构分配内存。

我的主程序太大而不能搞乱所以我创建了一个较小的程序来帮助我更容易地弄清楚发生了什么。之前我遇到过的问题看起来太复杂了,对我来说也不清楚,这就是我自己做的原因。

我想知道为什么第三个printf,打印4以及如何正确分配所需的内存(108个字节)

很高兴任何建议

 #include <stdio.h>
 #include <math.h>

    int main(){
        int object_counter = 9;

        typedef struct myStruct {
         int name;
         int age;
         int height;
        } myStruct;

        myStruct* dynamicStruct;
        dynamicStruct = malloc(object_counter*sizeof(myStruct));
        if (dynamicStruct == NULL) {
            printf("ERROR\n");
            return (-1);
        } else {
            printf("SUCCESS\n");
        }
        printf("Size is: %lu\n", sizeof(myStruct));             // prints 12, thats 3 times int, OK
        printf("Size is: %lu\n", object_counter*sizeof(struct myStruct));   // prints 108, obviously 9 times 4 bytes
        printf("Size is: %lu\n", sizeof(dynamicStruct));        // prints 4 ?? (expected 108)
        return 0;
    }

1 个答案:

答案 0 :(得分:0)

sizeof任何指针都是常量(我的Linux / x86-64系统上有8个字节,也是sizeof(uintptr_t)等等)。它与指向的内存区域的运行时大小无关。换句话说,sizeof operator 总是给出编译时常量(VLA s除外)。

您几乎需要保留malloc指针的已分配大小。例如,您可以将指针值保存在一个变量中,并将其分配的大小保存在另一个变量中。

您可以考虑使用flexible array members等抽象数据类型(使用here)方法。