On 01 Mar 2011, at 07:32, Paul Ishenin wrote:

I noticed today that if I want to allocate 0 bytes I get not a nil but a valid pointer. Why?

The current code that causes this comes from this (cvs) revision:

revision 1.16
date: 1999-09-17 19:14:12 +0200; author: peter; state: Exp; lines: +284 -966;
  + new heap manager supporting delphi freemem(pointer)

I guess the reason was to be able to
a) give a run time error if someone tries to do freemem(nil)
b) nevertheless allow freeing all pointers that have been allocated using getmem() (even if the size was 0 bytes), for backwards compatibility with FPC code from before that revision (FPC also returned a non-nil pointer in that case)

This is incompatible with delphi.

If it is changed, it will also require changes in cmem (and probably also in heaptrc), because at least on Mac OS X libc also returns a valid pointer for malloc(0).

And I suppose cause crashes and memory leaks not only in my delphi code which I'm porting to FPC/Lazarus.

That sounds very much like badly written code.


Jonas
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to