calloc,malloc和动态结构分配

时间:2011-12-18 18:10:37

标签: c arrays malloc structure calloc

我试图在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);

谢谢。

2 个答案:

答案 0 :(得分:1)

他们不一样。声明如下数据:

struct s_myStruct stuff[MAGIC];
如果你在函数范围内声明它,那么

会使内存保持未初始化状态(在第二种选择时你必须这样做)。在分号之前添加= {0}可以解决这个问题。

使用calloc的第二个选择是在堆上分配内存。

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

答案 1 :(得分:0)

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

但这与使用freadfwrite无关。