gpt4 book ai didi

calloc、malloc 和动态结构分配

转载 作者:行者123 更新时间:2023-11-30 15:59:40 24 4
gpt4 key购买 nike

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

谢谢。

最佳答案

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

struct s_myStruct stuff[MAGIC];
如果您在函数作用域中声明它,

将使内存保持未初始化状态(如果选择第二个选择,则必须如此)。在分号之前添加 = {0} 可以纠正此问题。

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

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

关于calloc、malloc 和动态结构分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8553684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com