Pascal 链表到链表不起作用

Pascal linked list to linked list does not work

这是我为学校项目制作的两个链表... 我希望从第二个列表调用第一个列表,我已经做到了,在编译时一切正常。当我 运行 它说: 项目 (myProject) 引发异常 class 'External: SIGSEGV'。 在地址 40D32D 这是我的代码:

   list2=^ptr;
   ptr=record
       vlera:integer;
       pozicioni:integer;
   end;

type
   list=^pointer;
   pointer=record
       rreshti:list2;
   end;
   var
     a:array[1..7] of list;
     i:integer;
     kjovlere:list2;

begin
    for i:=1 to 7 do begin
        a[i]:=@kjovlere;
        write('Give the pozition for the row:',i,' : ');
        read(a[i]^.rreshti^.pozicioni);
        write ('give the value for this poziton :');
        read(a[i]^.rreshti^.vlera);
        writeln;
    end;
end.  

而错误在 for 循环中,在 read(a[i]^.rreshti^.pozicioni); 如果有人解释我或给我任何建议,我将非常感激:)

提供的源代码显示了至少两个关于 Pascal 指针管理的误解。

Main Problem - To assign data, a record type shall be allocated before.

此问题涉及行 read(a[i]^.rreshti^.pozicioni);read(a[i]^.rreshti^.vlera);

a[i]rreshti都被声明为指针类型(list=^pointer; & list2=^ptr;)并且在分配数据之前应该分配到一个记录结构。

Step1: 在循环中分配a[i]指针

new(a[i]);

Step2: 在循环中分配a[i]^.rreshti指针

new(a[i]^.rreshti);

Strange Problem - Assign a pointer to a record type shall respect the destination type.

这个问题是指行a[i]:=@kjovlere;

a[i]list,它是 list=^pointer; 而不是 list2 (list2=^ptr;),如 kjovlere:list2; 声明的那样。

解决方案是:删除那行 a[i]:=@kjovlere;.

Solution:

begin
    for i:=1 to 7 do begin
        (* a[i]:=@kjovlere; to be removed *)
        new(a[i]);
        new(a[i]^.rreshti);
        write('Give the pozition for the row:',i,' : ');
        read(a[i]^.rreshti^.pozicioni);
        write ('give the value for this poziton :');
        read(a[i]^.rreshti^.vlera);
        writeln;
    end;
end.