c - realloc() 如何工作?

标签 c realloc

假设我已经使用 malloc() 分配了内存,如果我在我的代码中这样做:

char *newline = realloc ( oldline , newsize );
// Assuming oldline is the pointer to which the starting address
// of the memory which malloc() has returned, is assigned and,
// say, newsize is integer having 100 value.

现在我的问题是:-
  • newline 是否必须指向与 oldline 相同的地址,该地址保存了先前的初始地址?
  • 是不是在这种情况下,oldline 将被释放(隐式)并且 newline 将负责内存寻址?
  • 上面的代码和工作完成后,我应该怎么做才能释放内存
    free(newline);
    

    或者
    free(oldline);
    

    或两者?
  • 最佳答案

    这取决于 realloc 是否成功。如果 realloc 成功,则:

  • 不!例如,如果 oldline 之后没有足够的连续内存,那么 newline 将与 oldline 不同。
  • free(newline); 因为 oldline 已在必要时被释放。重新分配后 oldline 应视为无效指针。

  • 如果不成功。然后,你使用 oldline 就好像什么都没发生一样,特别是你应该释放它。

    关于c - realloc() 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22735092/

    相关文章:

    c - SDCC 和 malloc() - 分配比可用内存少得多的内存

    c - 如何检查从键盘输入的数字是否是c中的数字?

    c - 具有嵌套指针的嵌套结构

    c - 应该使用 realloc 吗?

    c - Realloc 在 For 循环中不起作用

    c - 尝试调整二维数组大小时出现段错误

    c - 以编程方式请求 root 访问权限

    arrays - 缩短计算二维数组中唯一字符数量的函数

    c - 我的指针错误在哪里?

    在 std::string 上使用 malloc/realloc/free 时出现 C++ 内存错误