Hi,
 
is there a way how to have dynamic array "inside" another dynamic array?
 
program project1;
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes, SysUtils
  { you can add units after this };
 
{$R *.res}
type
  TDynArray = array of Integer;
  PTDynArray = ^TDynArray;
 
var aArray, aNewArray: TDynArray;
    aNewStart: Integer;
begin
  SetLength(aArray, 300);
  writeln('Length of aArray ', length(aArray));
  aNewStart:=100;
  aArray[aNewStart+5]:=42;
  aNewArray:=@aArray[aNewStart];
  aNewArray[5]:=42;
  writeln('Length of aNewArray ', length(aNewArray));
end.      
 
So aNewArray begin at aArray[100] and have length=200 and I could write
NewArray[5]:=42; instead of aArray[aNewStart+5]:=42;
After all, memory is allocated correctly.
Code above gives "Invalid pointer operation" while this code
 
  aNewArray:=PTDynArray(@aArray[aNewStart])^;
 
  aNewArray[5]:=42; 
 
gives "Range check error".
 
Thanks.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to