【发布时间】:2013-01-04 18:46:31
【问题描述】:
在 C 中声明一个结构时,说:
typedef struct my_stuct {
int x;
float f;
} STRT;
如果我们想创建这个结构的一个实例并使用它,我们需要显式调用 malloc,获取一个指向这个结构的内存位置的指针,然后才能真正初始化/使用结构的任何成员:
STRT * my_struct_instance = (STRT *) (malloc(sizeof(STRT)));
但是,如果我声明一个原始数据类型(比如“int a;”)然后想要对其进行初始化(或对其执行任何其他操作),我不需要通过调用 malloc 显式为其分配内存空间在对其执行任何操作之前:
// we do not need to do a malloc(sizeof(i)) blah blah here. Why?
i = 10;
您能否解释一下造成这种不一致的原因是什么?谢谢!
【问题讨论】:
-
STRT object;工作正常,但成员将未初始化。 -
STRT object = {3, 5};那里,已初始化。 -
@user721998,
int i;不初始化i和malloc也不初始化它。 -
@user721998 你不知道。您可以像
ints 一样将structs 放入堆栈。 -
@Griwes,这里就是:stackoverflow.com/questions/605845/…
标签: c memory-management malloc