gpt4 book ai didi

c++ - 在 c 中使用 realloc

转载 作者:太空狗 更新时间:2023-10-29 19:54:40 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com