calloc后是否重新分配零输出字节?

我一直在读“ How to realloc some memory allocated using calloc?”。现在,我想知道如果块较大,realloc后跟calloc会否将新字节清零。

傻的例子:

#include <stdlib.h>
#include <string.h>

int test() {
  char *mem;

  mem = calloc(100,1);
  mem = realloc(mem,120);
  memset(mem + 100,20); // is this even necessary?
}

我已经对其进行了测试,并且似乎已将其清零-但我不确定是否总是这样?

daguai123456 回答:calloc后是否重新分配零输出字节?

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

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

对此评论:

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

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

本文链接:https://www.f2er.com/2433421.html

大家都在问