Description |
The GetMem procedure attempts to get the specified StorageSize bytes of storage, storing a pointer to the storage in StoragePointer.
If the allocation fails, then a EOutOfMemory exception is raised.
The storage is not initialised in any way.
|
|
Notes |
The GetMem procedure is Thread safe as long as IsMultiThread is true.
It is better to use New to allocate storage for records - the example is for illustration of GetMem and pointer manipulation.
|
|
Related commands |
Dispose |
|
Dispose of storage used by a pointer type variable |
FillChar |
|
Fills out a section of storage with a fill character or byte value |
FreeMem |
|
Free memory storage used by a variable |
New |
|
Create a new pointer type variable |
ReallocMem |
|
Reallocate an existing block of storage |
|
|
|
Example code : Get storage for 3 records and use this storage |
type
TRecord = Record
name : string[10];
age : Byte;
end;
var
recPointer : ^TRecord;
begin // Allocate storage for three records // Note : It is better to use New for this // It is used here for illustration purposes only
GetMem(recPointer, 3 * SizeOf(TRecord));
// Fill out these 3 records with values
recPointer.name := 'Brian';
recPointer.age := 23;
Inc(recPointer);
recPointer.name := 'Jim';
recPointer.age := 55;
Inc(recPointer);
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
|
|