如何为具有数组的结构分配内存

  • 本文关键字:结构 分配 内存 数组 c
  • 更新时间 :
  • 英文 :


假设我有一个表示虚拟机的结构。请查看我的init()方法。在init()方法中,我在堆中为虚拟机的状态分配一些空间。但是,有些事情似乎不对。我首先为我的state(struct(分配空间,然后为RAM(int类型的数组(分配空间。RAM已经在我的struct中了。没事吧?或者我做错了什么?

我的问题是如何为堆中结构内部的数组分配内存。

typedef struct {
int* ram;
int   pc;
} vm_t;
vm_t* init(int ram_size)
{
vm_t* vm = (vm_t*)malloc(sizeof(vm_t));
vm->ram = (int*)malloc(ram_size * sizeof(int));
vm->pc = 0;

return vm; 
}

我会用不同的方式来做。只需要一个malloc和free。

typedef struct {
size_t   pc;
int   ram[];
} vm_t;
vm_t* init(size_t ram_size)
{
vm_t *vm = malloc(sizeof(*vm) + ram_size * sizeof(vm -> ram[0]));
if(vm)
vm -> pc = 0;

return vm; 
}

注意:尺寸使用size_t,总是检查malloc的结果。使用对象而不是sizeof中的类型。当您更改类型时,内存分配将不必更改。

我不知道为什么RAM有int类型,但这在这个问题上并不重要。

编辑。如何访问。示例如何读取ram

int read_RAM(vm_t *vm, size_t address)
{
return vm -> ram[address];
}
int read_RAM1(vm_t *vm, size_t address)
{
return *(vm -> ram + address);
}

最新更新