首页 > 解决方案 > 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?
}

我已经对其进行了测试,它似乎被归零了——但我不确定它是否总是如此?

标签: cmemoryallocationrealloccalloc

解决方案


不,realloc不会将新字节清零。它在realloc 手册中这样说:

realloc() 函数将 ptr 指向的内存块的大小更改为 size 字节。内容将在从区域开始到新旧大小的最小值的范围内保持不变。如果新大小大于旧大小,则不会初始化添加的内存

对此评论:

我已经测试过了,它似乎被归零了

这不是一个决定性的测试。如前所述,realloc未定义将这些字节初始化为任何特定值。因此,不能保证字节为零(或任何其他值)并且永远不应该依赖。


推荐阅读