如果relloc必须将分配的内存大小调整为更大的大小,并且必须在单独的内存区域中完成,因为所需的内存量可以在适当的位置调整大小。原始内存是否由relloc自动解除分配(我会这么认为)或者必须由程序员完成(不太可能)?
答案 0 :(得分:5)
是的,realloc
会自动处理释放原始内存的问题。如果可以在适当的位置调整内存块的大小,那么realloc
将会这样做。如果没有,它将分配一个足够大的新内存块,将旧块中的数据复制到新块,并释放旧块。你不必担心自己解放它。
如果realloc
失败(例如,您要求内存过多,并且无法分配那么多内存),则原始内存 NOT 将被释放。如果你不小心,你可以泄漏内存 - 如果realloc
由于失败而返回NULL并且你没有保留指向原始内存块的指针,那么该内存将保持分配并泄漏。