[fpc-pascal] 2 Q on unexpected behaviour of FPC2.0.4

Hans MÃ¥rtensson cirkulation at maartensson.net
Sun Dec 17 22:47:27 CET 2006


When making some windows program with FPC2.0.4 using sysutils, I 
encountered a few problems that I tracked down to some (by me) 
unexpected behaviour of the compiler. The documentation is not clear on 
these points. So may I ask if the following is intentional or rather 
some bug.

Q1.
When trying to open a file that was not there with this program:
----------------------------------
program test;
uses sysutils;
var n: longint; f: THandle; buf: array[0..100] of byte;
begin
  f:=FileOpen('notafile', fmOpenRead);
  writeln('f=',f);
  n:=FileRead(f, buf, 50);
  writeln('n=',n);
end.
-----------------------------------

The file handle was returned as some positive value, while n was 
returned -1.
I would expect the file handle to be returned as -1 (when file is not 
found).
Otherwise there would be no meaning of testing the file handle?

Q2.
When using a dynamic array a in the program line
FileWrite(f, a, bytecount)
I had unexpected data written to the file, while the line
FileWrite(f, a[0], bytecount)
did what I wanted.

That may be logical, if a is a pointer, while a[0] is the first element 
of the array.
But it is different from static arrays, where a acts as the first 
element of the array.
Also sizeof(a) returns the full size of the array with a static array, 
but always 4 with a dynamic array.
If this is intentional, couldn't it be stated in the documentation?

Finally I would like to know:
What happens to a dynamic array if it is resized?
Are the old data copied into a new larger space of memory, and the old 
memory freed, such that the elements of the array are still contiguous 
in memory?

Hans Maartensson




More information about the fpc-pascal mailing list