【发布时间】:2017-12-03 14:00:25
【问题描述】:
我正在开发我的程序,该程序从外部 .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;
}
【问题讨论】:
-
这是指针(内存地址)的大小,而不是它指向的数据(你的结构)
-
dynamicStruct是一个 指针,在 32 位系统上通常为 4 个字节。sizeof在编译时评估。