c - 释放从 realloc 返回的空指针?

标签 c memory realloc

当我有一个指针应该重复用作 realloc 的参数时为了保存它的返回值,我知道 realloc如果无法分配,则不会触及旧对象,返回 NULL .我是否仍然应该担心结构中的旧对象,例如:

int *p = (int *)malloc(sizeof(int *));
if (p = (int *)realloc(p, 2 * sizeof(int *)))
 etc...
现在如果 realloc成功,我需要free(p)当我完成它时。
realloc失败,我已经分配了它的返回 NULLpfree(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/

相关文章:

c - 在给定某个文件(或标准输入)的一行中,我如何减少额外的空格并将制表符转换为单个空格?

c - fork() 和虚拟地址空间

c - 在 4.x.x 内核的 64 位内存中查找系统调用表

c - 如何将动态可执行文件转换为静态可执行文件?

c - 如何检查/etc/network/interfaces文件语法并用C代码测试它?

c - 如何在两个 C 程序之间发送变量

仅处理几 MB 数组时使用超过 512MB 的 PHP 脚本

c - realloc 错误 : corrupted size vs. prev_size

c - malloc() 、realloc 和数组

realloc 结构 vector 后无法访问数据