【问题标题】:using realloc in C with malloc [closed]在 C 中使用 realloc 和 malloc [关闭]
【发布时间】:2023-03-16 03:25:02
【问题描述】:

我有点理解 realloc 的作用,但是当尝试重新分配一定大小的内存时,我似乎并没有想到。如果没有所需大小的连续大小怎么办。或者,如果 null 作为指针传入,或者传入的大小为 0。我知道如果大小为 0,那么它想要释放该内存。 问题: 将 malloc 与 realloc 一起使用?

void *realloc(void *ptr, size_t newsize)
{
  if(newsize == 0)
    free(ptr);
  if(ptr == NULL)
    //does something
  //how does it malloc a size and copy everything over?
}

【问题讨论】:

  • 您是否尝试阅读man 页面?它解释了你提到的所有场景。
  • 您阅读文档了吗?我认为它明确回答了你所有的问题。

标签: c malloc realloc


【解决方案1】:
if (newsize == 0) {
    free(ptr);
    return;
}
if (ptr == NULL)
    return malloc(size);

// otherwise do a true realloc

至于

如果没有所需大小的连续大小怎么办。

然后realloc返回NULL并设置errno表示错误。

【讨论】:

  • @JamesCarter memcpy()。您知道周围有一个很棒的搜索引擎,叫做 Google 吗?
  • @JamesCarter 或更好man pages :P
  • @Darthfett:如果您正确使用realloc,即保存原始指针,您将永远不会丢失现有缓冲区。无需重新发明轮子,自己动手 malloc/memcpy/free
  • @larsmans:仅当您的低内存恢复策略执行除中止程序之外的其他操作时,保存原始指针才有用。制定这样的策略是否有意义取决于项目。
  • @KeithThompson 不过,如果您不想在 realloc() 失败时丢弃原始 ptr,那么向人们指出 realloc() 的临时 ptr 是一个非常好的主意。他们是否能够/将安全地处理这种情况是另一个问题。但如果你不考虑这个问题,对大多数人来说(显然)界面有点“危险”并不明显。
猜你喜欢
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 2012-09-19
  • 1970-01-01
相关资源
最近更新 更多