c - malloc 和 calloc 的初始化
问题描述
为什么malloc
总是用垃圾值初始化,calloc
总是用0初始化?背后有什么原因吗?
为什么我们不能使用realloc
而不是malloc
动态内存分配?
动态重新分配内存后,它的初始值是多少?
代码:
int *ptr;
ptr = (int *) realloc(ptr,50);
printf("%d",*ptr);
解决方案
为什么 Malloc 总是用垃圾值初始化而 Calloc 总是用 0 初始化?
此行为由 C 标准定义。
实际上malloc()
根本没有初始化分配的内存。这主要是出于性能原因。在自己写之前不要阅读它,以免激怒UB。
calloc()
指定初始化分配给所有0
s的内存。
为什么我们不能使用 realloc 而不是 malloc 进行动态内存分配。
你可以。只需NULL
作为第一个参数传递。
您的示例已调整:
int *ptr = NULL;
ptr = realloc(ptr, 50);
*ptr = 42;
printf("%d\n", *ptr);
印刷:
42
推荐阅读
- angular - 从 firestore 获取 ID 数组以从具有相同 ID 的另一个集合中获取文档,并将其结果组合到 Observable 中
? - react-native - 导航堆栈为空时如何导航到特定屏幕?
- excel - 将范围内的数据复制到记事本的代码
- angular - Angular 6:切换黑白标签
- typo3 - 错字3 GIF 无法在 9.5.4 中播放
- javascript - 需要使用 node.js 登录的网页抓取网页
- reinforcement-learning - 我应该实施一个智能奖励代理吗...?
- python - 如何同时发送文本和图像?
- python - 如何将彩色像素更改为白色像素
- php - 在左连接上显示 AVG