Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2006-12

2 Q on unexpected behaviour of FPC2.0.4

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Hans Mårtensson

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