[fpc-pascal] A warning when Blockwriting/reading dynamic array pointers
Jürgen Hestermann
juergen.hestermann at gmx.de
Fri Apr 1 18:04:56 CEST 2011
I just wanted to post a warning for everybody who wants to
(block)write/read dynamic arrays to/from file. All the documentation
about dynamic arrays I found only told me what I *can* do with them but
none said what I can *not* do. And there was no detailed information
about the internal works. That left room for (mis)interpretation and
costed me many days of headache. Maybe my experience is of interest for
others (and maybe it can be added to the documentation):
If you Blockwrite a dynamic array pointer to file (i.e. because it is
part of a large record) and read it back later with Blockread then the
pointer value is invalid of course. BUT, if you now try to set it to nil
as in
DynArray := nil;
then Free Pascal seems to free the memory where the pointer points to!
This creates hard to find access violations later in your program. This
cost me days of headache because never in my life I would have expected
that a simple assignment with nil would do more than just setting bytes
to zero. Instead of the above assignment I had to use
fillchar(DynArray,sizeof(DynArray),#0);
This solved all problems.
More information about the fpc-pascal
mailing list