Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
calloc后的realloc是否将字节归零?_C_Memory_Allocation_Realloc_Calloc - Fatal编程技术网

calloc后的realloc是否将字节归零?

calloc后的realloc是否将字节归零?,c,memory,allocation,realloc,calloc,C,Memory,Allocation,Realloc,Calloc,我一直在读书。现在我想知道如果块更大,realloc后跟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后跟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函数将ptr指向的内存块的大小更改为字节大小。从区域开始到新旧尺寸的最小值,内容物将保持不变。如果新大小大于旧大小,则不会初始化添加的内存

对这一评论:

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

这不是一个决定性的测试。如上所述,realloc没有定义为将这些字节初始化为任何特定值。因此,无法保证字节将为零或任何其他值,因此不应依赖这些值。

不,realloc不会将新字节归零。它是这样写的:

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

对这一评论:

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


这不是一个决定性的测试。如上所述,realloc没有定义为将这些字节初始化为任何特定值。因此,无法保证字节将为零或任何其他值,因此不应依赖这些值。

memsetmem+100,0,20;//这有必要吗?->是的,请注意mem=reallocmem,120;这不是个好主意。你的测试证明不了什么。calloc.memsetmem+100,0,20;//这有必要吗?->是的,请注意mem=reallocmem,120;这不是个好主意。你的测试证明不了什么。calloc的数据仍然是零。回答得好;紫外线。次要:realloc不涉及这些字节。更像是C规范,新对象中超出旧对象大小的任何字节都有不确定的值。。实现可能会触及新字节,也可能不会触及新字节,也可能会将它们归零,等等。重要的是它们是indertminate。这里的微妙之处在于realloc不需要不接触它们。我可以看到一个scrubs memmory的安全特性。@chux说得很好。我已经更新了你所指出的;紫外线。次要:realloc不涉及这些字节。更像是C规范,新对象中超出旧对象大小的任何字节都有不确定的值。。实现可能会触及新字节,也可能不会触及新字节,也可能会将它们归零,等等。重要的是它们是indertminate。这里的微妙之处在于realloc不需要不接触它们。我可以看到一个scrubs memmory的安全特性。@chux说得很好。我已经更新了你所指出的内容。