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.
这是我为学校项目制作的两个链表... 我希望从第二个列表调用第一个列表,我已经做到了,在编译时一切正常。当我 运行 它说: 项目 (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.