Почему эта структура записи компилируется, но выдает ошибку во время выполнения - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь следующий код с простой записью строки и целого числа:

program Progrecords; 

Type  
    Progrec = Record  
        pname : string;  
        pnum : integer; 
        end;  

var 
    Progs : Array of Progrec; 
    aprog, pp: Progrec; 

begin 
    aprog.pname := 'abc';
    aprog.pnum := 4; 
    Progs[0] := aprog;

    aprog.pname := 'def';
    aprog.pnum := 6; 
    Progs[1] := aprog;

    for pp in Progs do begin
        writeln('Name: ',pp.pname, '; Num: ', pp.pnum); 
    end;
end. 

Компилируется нормально, но выдает ошибку времени выполнения:

$ fpc rnrecords.pas && ./rnrecords
Free Pascal Compiler version 3.0.0+dfsg-11+deb9u1 [2017/06/10] for x86_64
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling rnrecords.pas
rnrecords.pas(17,2) Warning: Variable "Progs" of a managed type does not seem to be initialized
Linking rnrecords
/usr/bin/ld.bfd: warning: link.res contains output sections; did you forget -T?
27 lines compiled, 0.1 sec
1 warning(s) issued

Runtime error 216 at $0000000000400226
  $0000000000400226
  $000000000040018C

Я работаю в Debian Stable Linux с версией fpc 3.0.0

Где проблема и как ее можно решить? Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 19 июня 2019

Progs является динамическим массивом и должен быть выделен перед использованием.

Например:

SetLength(Progs,2);  // Allocates two records

См. Динамический массив

...