[Overview][Constants][Types][Classes][Procedures and functions][Variables][Index] | Reference for unit 'System' (#rtl)

# Dispose

Free dynamically allocated memory

## Declaration

Source position: system.fpd line 40

`procedure Dispose(`
`P: Pointer`
`); procedure Dispose(`
`P: TypedPointer;`
`Des: TProcedure`
`);`

## Description

The first form Dispose releases the memory allocated with a call to New. The pointer P must be typed. The released memory is returned to the heap.

The second form of Dispose accepts as a first parameter a pointer to an object type, and as a second parameter the name of a destructor of this object. The destructor will be called, and the memory allocated for the object will be freed.

## Errors

An runtime error will occur if the pointer doesn't point to a location in the heap.

## See also

New |  | Dynamically allocate memory for variable
Getmem |  | Allocate new memory on the heap
Freemem |  | Release allocated memory

## Example

    Program Example16;

    { Program to demonstrate the Dispose and New functions. }

    Type SS = String[20];

         AnObj = Object
           I : integer;
           Constructor Init;
           Destructor Done;
           end;

    Var
      P : ^SS;
      T : ^AnObj;

    Constructor Anobj.Init;

    begin
     Writeln ('Initializing an instance of AnObj !');
    end;

    Destructor AnObj.Done;

    begin
      Writeln ('Destroying an instance of AnObj !');
    end;

    begin
      New (P);
      P^:='Hello, World !';
      Dispose (P);
      { P is undefined from here on !}
      New(T,Init);
      T^.i:=0;
      Dispose (T,Done);
    end.