c - 使用 realloc() 初始化内存

标签 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() 分配的内存吗?

最佳答案

Will the additional memory be initialized to 0?

没有。

can we realloc() the memory allocated with calloc()?

是的。

Is assigning s to p a good way to resize the pointer 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() 成功 传入的指针值不一定再寻址任何有效内存。不要读取它,也不要读取指针值本身,因为在这两种情况下这样做都可能引发未定义的行为。

关于c - 使用 realloc() 初始化内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54379535/

相关文章:

c - ANSI C : How do I abstract over over struct fields?

amazon-web-services - Cloudwatch 自定义指标 - 内存利用率 --from-cron 不起作用

mysql - 无法对套接字执行操作,因为系统缺少足够的缓冲区空间或因为队列已满 - wamp 服务器

c - C 中的动态大小字符串

c - realloc() 用于 C 中结构指针

c - GDB 为数组值返回<optimized out>

c - 是否订购了带 IOCP 的 WSASend?

c - 收到错误 : error: expected ')' before

c - 如何在 linux 中获取 C 中可用内存的总大小?

C realloc 段错误