c++ - 在 c 中使用 realloc

标签 c++ c

我正在使用 void *realloc(void *pointer, size_t size); 来增加指针的大小。 realloc 是如何工作的?
它是否创建一个 nre 地址空间,并将旧值复制到新地址空间并返回该地址的指针?或者它只是分配更多内存并将其绑定(bind)到旧内存?

最佳答案

@Iraklis有正确的答案:它会执行第二个(如果它可以逃脱)或第一个(但只有在必须这样做的情况下)。

然而,有时两者都做不到,而且会失败。注意:如果它无法调整数据大小,它将返回 NULL,但内存将NOT空闲d。这样的代码是错误的:

ptr = realloc(ptr, size);

如果 realloc 返回 NULL,旧的 ptr 将永远不会得到 freed 因为你已经覆盖了它使用 NULL。要正确执行此操作,您必须执行以下操作:

void *tmp = realloc(ptr, size);
if(tmp) ptr = tmp;
else /* handle error, often with: */ free(ptr);

在BSD系统上,上面的内容变成了一个名为reallocf的库函数,实现如下:

void *reallocf(void *p, size_t s)
{
    void *tmp = realloc(p, s);
    if(tmp) return tmp;
    free(p);
    return NULL;
}

让您安全使用:

ptr = reallocf(ptr, size);

请注意,如果 realloc 必须分配新空间并复制旧数据,它 释放 旧数据。只有当它无法调整大小时,它才会完整地保留您的数据,以防调整大小失败是可恢复的错误。

关于c++ - 在 c 中使用 realloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5322364/

相关文章:

c++ - C++中函数重载的混淆

c++ - 如何使用 UML 表示 C++ new() 运算符

c++ - lambda 中引用捕获的对象的类型

时间:2019-03-09 标签:c++multicastfeed

c - 来自固定大小缓冲区的 malloc 实现

c++ - 使用 C++ 中的嵌入式 Mongoose 服务器执行典型的服务器任务

c - 将大型 (~4MB) 文件上传到 boa 网络服务器时出现不可预测的行为

c - 如何通过调用 exec 函数族的成员来获取程序运行的返回值?

c - 返回什么;在 boolean 返回类型返回的 C 函数中?

c++ - 错误 : lvalue required as unary & operand