c - 什么时候必须使用 malloc 分配内存?

标签 c memory-management malloc

1)
我必须使用 malloc 为哪些数据类型分配内存?

  • 对于结构、指针等类型,除了基本数据类型,如 int
  • 对于所有类型?

2)
为什么我可以运行这段代码?为什么它不崩溃?我假设我需要先为结构分配内存。

#include <stdio.h>
#include <stdlib.h>

typedef unsigned int uint32;
typedef struct 
{
  int a;
  uint32* b;
}
foo;

int main(int argc, char* argv[])
{
 foo foo2;
 foo2.a = 3;
 foo2.b = (uint32*)malloc(sizeof(uint32));
 *foo2.b = 123;
}

用起来不是更好吗

foo* foo2 = malloc(sizeof(foo));

3) foo.b 是如何设置的?是引用随机内存还是 NULL?

#include <stdio.h>
#include <stdlib.h>

typedef unsigned int uint32;
typedef struct 
{
  int a;
  uint32* b;
}
foo;

int main(int argc, char* argv[])
{
 foo foo2;
 foo2.a = 3;

}

最佳答案

C 中的所有类型都可以动态、自动(在堆栈上)或静态分配。问题不在于类型,而在于你想要的生命周期——当你希望一个对象存在于创建它的函数的范围之外时,或者当你事先不知道你需要多大的东西时,你可以使用 malloc。

关于c - 什么时候必须使用 malloc 分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175885/

相关文章:

memory-management - VirtualAlloc对齐

c - 数组的地址与数组[0]的地址 - C语言

c - 在C中有效地初始化结构内部的指针

在生产环境中捕捉返回码?

c - 堆栈计算器改变变量的值

iOS 8.3 - CoreGraphics 图像绘制中的 EXC_BAD_ACCESS

Java Statics 原语、对象、方法和堆(内存管理和最佳实践)

c - 如何在struct中使用malloc或new?

cuda - CUDA中Malloc函数的效率

c - 在有限制的情况下玩一会儿 - C 编程