【发布时间】:2014-07-08 19:14:30
【问题描述】:
我试图记住 C 编程的基础知识,关于指向结构的指针,我做了以下事情:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main()
{
struct MyStruct {
int number;
char *name;
};
int i;
struct MyStruct *p_struct = (struct MyStruct *) malloc(sizeof(struct MyStruct)*3);
printf("sizeof(struct MyStruct) = %d\n", sizeof(struct MyStruct));
for (i = 0; i < 3; i++)
{
p_struct->number = i;
p_struct->name = "string";
printf("p_struct->number = %d, p_struct->name = %s\n", p_struct->number, p_struct->name);
++p_struct;
}
printf("sizeof(p_struct) = %d\n", sizeof(p_struct));
free(p_struct);
return 0;
}
我的问题是:我得到 8 个字节作为结构的大小,由于编译器的对齐/填充,这可以作为 4+4 = 8 个字节,但为什么我从 sizeof(p_struct) 得到 4 个字节?
我希望得到 24(8 字节 x 3),为什么会这样?
如果这是正确的,我能否以某种方式获得 24 字节的总分配大小?
【问题讨论】:
-
请注意,在这个简单的示例中,不需要使用
malloc来分配您的结构。您可以(并且应该)尽可能在堆栈上分配数据。要在堆栈上分配结构,只需声明一个变量struct MyStruct myStruct;。分配在栈上的数据会自动释放,无需显式调用free。 -
没错,重点是我在练习动态内存分配——这就是我特别使用 malloc 的原因。