假设我已经使用 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/

    10-10 01:11