当我有一个指针应该重复用作 realloc
的参数时为了保存它的返回值,我知道 realloc
如果无法分配,则不会触及旧对象,返回 NULL
.我是否仍然应该担心结构中的旧对象,例如:
int *p = (int *)malloc(sizeof(int *));
if (p = (int *)realloc(p, 2 * sizeof(int *)))
etc...
现在如果 realloc
成功,我需要free(p)
当我完成它时。当
realloc
失败,我已经分配了它的返回 NULL
至 p
和 free(p)
什么都不做(因为它是 free(NULL)
)。同时(根据标准)旧对象不会被释放。所以我应该有一份
p
的副本吗? (例如 int *last_p = p;
)用于跟踪旧对象,以便我可以 free(last_p)
当realloc
失败?
最佳答案
So should I have a copy of p (e.g. int *last_p = p;) for keeping track of the old object, so that I can free(last_p) when realloc fails?
基本上:是的,当然。
通常不建议使用您显示的模式:
p = (int *)realloc(p, ...)
由于您发现的原因,这被认为是不好的做法。改用这个:
void *new = realloc(p, ...);
if (new != NULL)
p = new;
else
...
强制转换 malloc
的返回值也被认为是不好的做法。 , realloc
C 中的等。这不是必需的。
关于c - 释放从 realloc 返回的空指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69094274/