我仍然对 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/