c - 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 不是未初始化吗?谁能给我解释一下?谢谢!
解决方案
该malloc
函数不会初始化它分配的内存。内容将是不确定的(并且可能看起来“随机”或“垃圾”)。
如果要对内存进行零初始化(这意味着所有指针都是NULL
),则使用calloc
或显式初始化数据。
另请注意,在 C 中,您不应强制返回malloc
(和兄弟姐妹)。
推荐阅读
- assembly - 终端打印一个“?” x86减法运算中的字符
- nginx - 在 CentOS 7.9 中安装 epel 后没有可用的软件包 nginx
- php - 处理多种场景运费计算和数据存储
- java - Java逻辑错误:继续运行相同的菜单
- reactjs - 如何创建嵌套组件?
- c# - 如何使用返回的 cookie 发出获取请求?
- c# - 向 Firebase 发送 FCM 消息时出现错误 System.IO.IOException: Unable to write data to the transport connection
- javascript - 如何通过刷新触发带有持久复选框的 OnClick 事件
- swift - 如何使用 Mac-Catalyst 添加最近的文件
- php - php中preg_replace的问题-在html中转换特定代码