dispose: bug or feature?

Russell Whitaker russ at ashlandhome.net
Tue Dec 11 23:27:14 CET 2007



On Mon, 10 Dec 2007, Scott Moore wrote:

[..]
>
> What did you expect to happen?
>
I expected "dispose" to undo what "new" does.
Could not find a comment in gpc's source that states otherwise.

At present,

new(p)
   1. allocates a block of memory from the heap, the size is the size
      that p wants to point to.
   2. returns the address of that memory block.

dispose(p)
   1. marks the block of memory that p points to as free.
      (I say "marks" because the block doesn't disapear)

Thus, this works, but shouldn't:

   writeln( p^ );
   dispose( p );
   writeln( p^ );

If you dig into gpc's heap.pas you will find code that is the
equivalent of:

   if p <> nil then
     dispose(p);

What I'd like to see is the equivalent of:

   if p <> nil then
   begin
     dispose(p);
     p := nil;
   end
   else
     writeln( stderr,"WARN: illegal use of dispose");

In places the specs are hard to follow, but I think the specs would
allow this.

    Russ





More information about the Gpc mailing list