使用realloc()初始化内存

时间:2019-01-26 14:54:58

标签: c memory realloc

关于realloc()的问题。

如果我想用realloc()分配以前分配的内存。

是否像calloc()一样将额外的内存初始化为0?

第二个问题是:

    int * p =(int*)malloc(10*sizeof(int));
    int* s = (int*)realloc(p,20);
    p=s;

s分配给p是调整指针p大小的好方法吗?

我们可以realloc() calloc()分配的内存吗?

1 个答案:

答案 0 :(得分:2)

  

将额外的内存初始化为0吗?

否。

  

我们可以realloc() calloc()分配的内存吗?

是的

  

正在为s分配p来调整指针p的大小的好方法

视情况而定。

只要做

int * p = malloc(...);
int * s = realloc(p, ...);
p = s;

相同
int * p = malloc(...);
p = realloc(p, ...);
int * s = p;

在两种情况下,如果realloc()失败(并返回NULL),则原始内存的地址将丢失。

但是做

int * p = malloc(...);

{
  int * s = realloc(p, ...); /* Could use a void* here as well. */
  if (NULL == s)
  {
     /* handle error */
  }
  else
  {
    p = s;
  }
}

对于realloc()的失败具有鲁棒性。即使出现故障,仍可以通过p访问原始内存。

请注意,如果realloc() 成功,则传入的指针值不必再寻址任何有效内存。 不读取它,也不读取指针值本身,因为在两种情况下都执行此操作可能会导致未定义的行为。