c - calloc 后的 realloc 是否会清零字节?
问题描述
我一直在阅读“如何重新分配使用 calloc 分配的一些内存? ”。现在我想知道如果块较大,arealloc
后跟 a是否calloc
会将新字节清零。
愚蠢的例子:
#include <stdlib.h>
#include <string.h>
int test() {
char *mem;
mem = calloc(100, 1);
mem = realloc(mem, 120);
memset(mem + 100, 0, 20); // is this even necessary?
}
我已经对其进行了测试,它似乎被归零了——但我不确定它是否总是如此?
解决方案
不,realloc
不会将新字节清零。它在realloc 手册中这样说:
realloc() 函数将 ptr 指向的内存块的大小更改为 size 字节。内容将在从区域开始到新旧大小的最小值的范围内保持不变。如果新大小大于旧大小,则不会初始化添加的内存。
对此评论:
我已经测试过了,它似乎被归零了
这不是一个决定性的测试。如前所述,realloc
未定义将这些字节初始化为任何特定值。因此,不能保证字节为零(或任何其他值)并且永远不应该依赖。
推荐阅读
- postgresql - Docker Compose 的问题 - 致命:数据库“root”不存在(PostgresSQL)
- javascript - 缩放和居中不同尺寸的图像,在 CSS 中使用右对齐文本
- algorithm - How to handle disconnected faces with same vertex for a half edge structure?
- java - Android Apache Logger 在生产环境中无故崩溃(发布版本)
- javascript - 禁用 chrome 中的“打开会话”弹出窗口
- python - How to predict y-value in multiple linear regression model?
- javascript - Puppeteer run javascript in website console (devtools)
- java - 如何使用 startAt() 和 endAt 方法搜索具有多个搜索键的 Firestore 集合
- ios - make SKPhysicsBody unidirectional
- html - How to trigger a change event on a textarea when setting the value via ngModel Binding