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.

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

Reply via email to