0

我正在尝试在 c 中动态分配一个结构数组,以便我可以像进行静态声明一样引用它们。我知道 calloc() 执行将所有分配的内存初始化为 0 的附加步骤。但是,除此之外,以下代码是否可以完全互换 2?如果我使用 fread() 和 fwrite() 将这些数据结构进出文件,那么 calloc() 会帮助还是阻碍呢?

#define MAGIC   13
    struct s_myStruct {
int a[6000][400];
int b[6000][400];
int c[6000][400];
};

struct s_myStruct stuff[MAGIC];
vs
struct s_myStruct *stuff = calloc(MAGIC, sizeof(s_myStruct);

谢谢你。

4

2 回答 2

1

他们不一样。像这样声明数据:

struct s_myStruct stuff[MAGIC];

如果您在函数范围内声明它,它将使内存未初始化(您必须这样做,给定第二个选择)。在分号之前添加= {0}可以纠正此问题。

第二种选择,使用 calloc,在堆上分配内存。

但是总是有区别:sizeof(stuff)在第一种情况下是 13 * sizeof(struct s_myStruct),在第二种情况下是指针的大小。

于 2011-12-18T18:20:58.130 回答
0

你真的不想做第一个,因为你会把 13 * 3 * 6000 * 400 * 4 = 370MB 放在堆栈上。

fread但这与使用and无关fwrite

于 2011-12-18T18:12:38.387 回答