c - C中动态分配内存的初始化

标签 c malloc calloc

我仍然对 malloc() 和 calloc() 这两个函数感到困惑
我们知道 calloc() 会初始化它分配的内存,而 malloc() 则不会。
但当我尝试下面的代码时,结果似乎出乎意料。

typedef struct{
    int *val;
}Node;
int main()
{
    Node *q=(Node*)malloc(sizeof(Node));
    if(q->val==NULL) printf("malloc initialized memory\n");
    Node *p=(Node*)calloc(1,sizeof(Node));
    if(p->val==NULL) printf("calloc initialized memory\n");
}

p 和 q 的 val 的变量“val”均为 NULL。 q->val 不是未初始化吗? 谁能给我解释一下吗?谢谢!

最佳答案

malloc函数初始化它分配的内存。内容将是不确定(并且可能看起来“随机”或“垃圾”)。

如果你想对内存进行零初始化(这意味着所有指针都是NULL),那么使用calloc ,或显式初始化数据。

另请注意,在 C 中,您 should not cast the return of malloc (and siblings) .

关于c - C中动态分配内存的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54750745/

相关文章:

c - 信号量函数

c - malloc 和 free 如何处理错误?

ios - Swift - 如何使用 malloc?

c - 为 CFD 求解器 Fluent 编写的 UDF(C 代码)存在段违规问题

c - 将 C 代码从 HP-Unix 移动到 Linux 时替换 linux 中的 pstat.h

java - 指向结构指针的指针作为 JNA 中的参数

无法打开先进先出

c - 函数指针分配在堆上

c - malloc 和 calloc

c - free() 函数给出 Core Dumped 错误