Jul*_*ius 1 c memory allocation realloc calloc
我一直在阅读“如何重新分配使用 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?
}
Run Code Online (Sandbox Code Playgroud)
我已经对其进行了测试,似乎已将其归零 - 但我不确定是否总是如此?
不,realloc不会将新字节归零。在realloc 手册中是这样说的:
realloc() 函数将 ptr 指向的内存块的大小更改为 size 字节。内容将在从区域开始到新旧大小中的最小值的范围内保持不变。如果新大小大于旧大小,则不会初始化添加的内存。
对此评论:
我已经测试过了,它似乎被归零了
这不是一个决定性的测试。如前所述,realloc未定义将这些字节初始化为任何特定值。所以不能保证字节为零(或任何其他值)并且永远不应该依赖。