gpt4 book ai didi

c - 结构体的 Malloc

转载 作者:行者123 更新时间:2023-11-30 16:38:02 29 4
gpt4 key购买 nike

我正在开发我的程序,该程序从外部加载数据 .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;
}

最佳答案

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

您实际上需要在其他地方保留 malloc 指针的分配大小。例如,您可以将指针值保存在一个变量中,并将其分配的大小保存在另一个变量中。

您可以考虑使用抽象数据类型(使用 flexible array members )方法,例如 here .

关于c - 结构体的 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47619139/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com