首页 > 解决方案 > C中动态分配内存的初始化

问题描述

我仍然对 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 不是未初始化吗?谁能给我解释一下?谢谢!

标签: cmalloccalloc

解决方案


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

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

另请注意,在 C 中,您不应强制返回malloc(和兄弟姐妹)


推荐阅读