简体   繁体   中英

Cannot construct dynamic array in dev-pascal

I am still a beginner, so please forgive me if it is a stupid mistake or something. I want to write a program to generate prime numbers from 2 to n, and n is user-defined. Since I do not know n at the start of the program, I want to construct a dynamic array and setlength(n) afterwards. Here is a snippet of my code:

    program D401;
    type
       arr = array of int64;
    var
       x : int64;
       a : arr;
    begin
        readln(x);
        setlength(a, x);
    end.

But it won't work and and it says: Fatal: Syntax error, [ expected but OF found

I also tried this:

    program D401;
    var
       x : int64;
       a : array of int64;
    begin
        readln(x);
        setlength(a, x);
    end.

But it also produces the same error. I also used freepascal and GNU pascal but it also doesn't work. Is it dev-pascal's problem or it is not updated or something?

Thanks in advance.

Dev Pascal is ancient and uses old compilers that do not support dynamic array syntax. Simply put you should not use it today.

If you want a free development environment using an up-to-date Pascal compiler the best option is Lazarus, using a modern version of freepascal.

It doesn't matter in the modern world. But I am writing my answer for those who want to deliberately use the outdated GNU Pascal. I know a little about GNU Pascal but suggest a pointer based approach:

program dynarr;

type
  TElem = integer;
  TPArray = ^TElem;

var
  pArray: TPArray;
  length, i: INTEGER;

begin
  length := 10;
  GetMem(pArray, length * sizeof(TElem));

  for i := 0 to length-1 do
    (pArray+i)^:=i;
  for i := 0 to length-1 do
    writeln((pArray+i)^);

  FreeMem (pArray, length * sizeof(TElem));
  readln;
end.

Compile with --pointer-arithmetic option

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM