Mega Code Archive

 
Categories / Delphi / Procedures
 

Reallocmem - reallocate an existing block of storage system unit

procedure ReallocMem ( var StoragePointer : Pointer; StorageSize : Integer ) ; Description The ReallocMem procedure changes the storage size of an existing block of storage. The size may be smaller or bigger. If smaller, then the existing storage is effectively truncated, the remainder being released. If larger, the storage is extended. Or a new block is allocated if necessary. In either case, the existing storage block data is preserved, and the new part is unitialised. Notes Warning : use with caution - excessive use can fragment storage. Related commands Dispose Dispose of storage used by a pointer type variable FreeMem Free memory storage used by a variable GetMem Get a specified number of storage bytes New Create a new pointer type variable Example code : Allocate using GetMem and then reallocate using ReallocMem type TRecord = Record name : string[10]; age : Byte; end; var recPointer : ^TRecord; begin // Allocate storage for 2 records // Note : It is better to use New for this // It is used here for illustration purposes only GetMem(recPointer, 2 * SizeOf(TRecord)); // Fill out these 2 records with values recPointer.name := 'Brian'; recPointer.age := 23; Inc(recPointer); recPointer.name := 'Jim'; recPointer.age := 55; // Whoops - forgot to add Sally ... Dec(recPointer); ReallocMem(recPointer, 3 * SizeOf(TRecord)); // Now add a third record Inc(recPointer,2); recPointer.name := 'Sally'; recPointer.age := 38; // Now display these values Dec(recPointer, 2); ShowMessageFmt('%s is %d',[recPointer.name, recPointer.age]); Inc(recPointer); ShowMessageFmt('%s is %d',[recPointer.name, recPointer.age]); Inc(recPointer); ShowMessageFmt('%s is %d',[recPointer.name, recPointer.age]); end; Show full unit code Brian is 23 Jim is 55 Sally is 38