在C中为结构分配内存
我的任务是创建一个为结构动态分配内存的程序。 通常我们会用
x=malloc(sizeof(int)*y);
但是,我对结构变量使用了什么? 我认为不可能这样做
struct st x = malloc(sizeof(struct));
有人可以帮帮我吗? 谢谢!
我的最爱:
#include struct st *x = malloc(sizeof *x);
注意:
-
x
必须是指针 - 不需要演员表
- 包括适当的标题
你做得不对。 struct st x
是一个结构,而不是一个指针。 如果你想在堆栈上分配一个,那很好。 对于在堆上分配, struct st * x = malloc(sizeof(struct st));
。
struct st* x = malloc( sizeof( struct st ));
这是完全可能的 – 这是正确的方法
假设你想打字
struct st *x = malloc(sizeof(struct st));
PS。 即使知道所有内容的大小,也必须执行sizeof(struct),因为编译器可能会填充结构以使成员对齐。
struct tm { int x; char y; }
可能有不同的大小
struct tm { char y; int x; }
这应该做:
struct st *x = malloc(sizeof *x);
struct st *x = (struct st *)malloc(sizeof(struct st));
我相信,当你在struct
类型上调用sizeof
时,C递归地在struct
的字段上调用sizeof。 所以, struct st *x = malloc(sizeof(struct st));
只有struct st
具有固定大小才能真正起作用。 这只有在你的结构中有类似变量大小的字符串的东西时才有意义,并且你不想每次都给它一个最大长度。
一般来说,
struct st *x = malloc(sizeof(struct st));
作品。 有时,您将遇到可变大小的结构或“抽象”结构(想想:来自Java的抽象类),编译器会告诉您它无法确定struct st的大小。 在这些情况下,您必须手动计算大小并使用数字调用malloc,否则您将找到一个函数,该函数返回您想要的完全实现的malloc版本的结构。