c – 在c中使用realloc

我正在使用void * realloc(void * pointer,size_t size);增加指针的大小. realloc是如何工作的?
它是否创建了一个nre地址空间,并将旧值复制到新的地址空间并返回一个指针这个地址?或者它只是分配更多的内存并将其绑定到旧内存?
最佳答案
@Iraklis有正确的答案:第二个(如果它可以逃脱它)或第一个(但只有它必须).

但是,有时它既不能做也会失败.注意:如果它无法调整数据大小,它将返回NULL,但不会释放内存.像这样的代码是错误的:

ptr = realloc(ptr, size);

如果realloc返回NULL,那么旧的ptr永远不会被释放,因为你用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 - 代码日志