在C中为结构分配内存

Bla*_*ary 29 c malloc structure

我的任务是创建一个为结构动态分配内存的程序.通常我们会用

x=malloc(sizeof(int)*y);
Run Code Online (Sandbox Code Playgroud)

但是,我对结构变量使用什么?我认为不可能这样做

struct st x = malloc(sizeof(struct)); 
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?谢谢!

dir*_*tly 65

我的最爱:

#include <stdlib.h>

struct st *x = malloc(sizeof *x); 
Run Code Online (Sandbox Code Playgroud)

注意:

  • x 必须是指针
  • 不需要演员表
  • 包括适当的标题

  • 不要让孩子玩尖锐的物体:) (15认同)
  • 一个好处是它强制执行`x`作为指针. (5认同)
  • 我最喜欢的事实是,即使您稍后重命名该结构,RHS仍然有效.可以说,对于现代编辑来说,这不是什么大问题. (4认同)

Dav*_*ley 6

你做得不对. struct st x是一个结构,而不是指针.如果你想在堆栈上分配一个,那很好.对于在堆上分配,struct st * x = malloc(sizeof(struct st));.


Mar*_*ett 5

这是完全可能的——而且是正确的方法

假设您想输入

struct st *x = malloc(sizeof(struct st)); 
Run Code Online (Sandbox Code Playgroud)

附:即使您知道所有内容的大小,您也必须执行 sizeof(struct) ,因为编译器可能会填充结构以便成员对齐。

struct tm {
  int x;
  char y;
}
Run Code Online (Sandbox Code Playgroud)

可能有不同的尺寸

struct tm {
  char y;
  int x;
}
Run Code Online (Sandbox Code Playgroud)

  • 不:“sizeof(struct)”不合法。`sizeof(struct st)` 是。 (4认同)

Nik*_*sov 5

struct st* x = malloc( sizeof( struct st ));