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