调整大小时的relloc行为

时间:2009-09-19 04:59:47

标签: c memory-management

如果relloc必须将分配的内存大小调整为更大的大小,并且必须在单独的内存区域中完成,因为所需的内存量可以在适当的位置调整大小。原始内存是否由relloc自动解除分配(我会这么认为)或者必须由程序员完成(不太可能)?

1 个答案:

答案 0 :(得分:5)

是的,realloc会自动处理释放原始内存的问题。如果可以在适当的位置调整内存块的大小,那么realloc将会这样做。如果没有,它将分配一个足够大的新内存块,将旧块中的数据复制到新块,并释放旧块。你不必担心自己解放它。

如果realloc失败(例如,您要求内存过多,并且无法分配那么多内存),则原始内存 NOT 将被释放。如果你不小心,你可以泄漏内存 - 如果realloc由于失败而返回NULL并且你没有保留指向原始内存块的指针,那么该内存将保持分配并泄漏。