如果我重新分配 calloc 指针,结果会怎样?

what will be the result if i reallocating the calloc pointer?

int main()
{
  int *ptr = (int*)calloc(10,sizeof(int));//allocating memory for 10 integers
  ptr = realloc(ptr,20*sizeof(int)); //reallocating the memory for 20 integers
  free(ptr);
  return 0;
}

最初 ptr 保持内存包含零,但新创建的内存包含零或垃圾值。

If zeros present how can realloc know weather the ptr is created using malloc or calloc.

即使您正确地调用了 realloc(没有转换结果并将其分配回去,否则它无法正常工作):

ptr = realloc(ptr,20*sizeof(int));

(有些人可能会说它不安全,因为 realloc 可以 return NULL 从而失去对 ptr 的引用)

事实并非如此。它只是重新分配 而没有 将其余部分设置为 0

您必须使用 memset 手动将剩余内存设置为 0。

我会做:

int *ptr_new = realloc(ptr,20*sizeof(int));
if (ptr_new == NULL) { /* print error, free(ptr) and exit: no more memory */ }
else
 {
    // set the end of memory to 0
    memset(ptr_new+10,0,sizeof(int)*10);
   ...

注意:一个常见的错误是 而不是 分配回 realloc 的结果,因为它似乎有效,直到 OS 需要将内存移动到另一个块,在这种情况下,您的 ptr 指针变得无效并且您有未定义的行为。