[fpc-devel] GetMem(SomePointer, 0) <> nil
Jonas Maebe
jonas.maebe at elis.ugent.be
Tue Mar 1 13:29:00 CET 2011
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
More information about the fpc-devel
mailing list