Pascal 帕斯卡列表问题
我现在面临一个与Pascal中的列表相关的问题。 当我添加一个人时,它会成功,但当我要添加下一个人时,它会抛出一个错误: 艾德:拉扎勒斯 代码(在代码开头,头部等于零):Pascal 帕斯卡列表问题,pascal,Pascal,我现在面临一个与Pascal中的列表相关的问题。 当我添加一个人时,它会成功,但当我要添加下一个人时,它会抛出一个错误: 艾德:拉扎勒斯 代码(在代码开头,头部等于零): 类型 个人=记录 名称:字符串[15]; 姓氏:字符串[15]; 年龄:整数; 结束; pListElement=^listedelement; ListElement=记录 人:^人; 下一步:pListElement; 结束; 程序负责人(var负责人:PLISTELENT); 程序展示人员(var负责人:PLISTELE
类型
个人=记录
名称:字符串[15];
姓氏:字符串[15];
年龄:整数;
结束;
pListElement=^listedelement;
ListElement=记录
人:^人;
下一步:pListElement;
结束;
程序负责人(var负责人:PLISTELENT);
程序展示人员(var负责人:PLISTELENT);
实施
程序负责人(var负责人:PLISTELENT);
Var NewPerson:pListElement;
开始
新人;
写('Podaj imie:');
readln(NewPerson^.Person^.name);
写('Podaj nazwisko:');
readln(NewPerson^.Person^.last_name);
写('Podaj wiek:');
readln(新人年龄);
如果(水头=零),则
开始
头:=新人;
NewPerson^.next:=nil;
结束其他
开始
NewPerson^.next:=头;
新人:=人头;
结束;
结束;
程序展示人员(var负责人:PLISTELENT);
开始
如果(头零)那么
开始
作者(“|”,head^.Person^.姓名:15,“|”,head^.Person^.姓氏:15,“|”,head^.Person^.年龄:3,”);
演艺人员(负责人^下一位);
结束;
结束;
问题在于,当您在Addperson中创建一个新的ListElement记录时,您假定此人已神奇地初始化。事实并非如此。需要查找或创建(new()'ed),这取决于它的实际用途。我们看不到您的屏幕。当错误发生时,具体执行哪一行?ide不知道哪一行。屏幕是可见的。我很惊讶它不能告诉你哪一行。无论如何,如果是这样的话,请按照我们过去的做法—注释掉过程中的所有行,然后逐个重新引入它们,直到错误再次出现。调试器会准确地告诉您是哪一行导致了问题。学会使用它。我不懂,所以我也应该创造一个新的人?还是什么?我不知道。你把那个人变成了一个指针。为什么不直接将person字段放在listelement中?您现在这样做可能是因为,例如,当多个ListElement项可以指向同一个人或类似的对象时,您需要两个新的()s。一个用于NewPerson
pListElement,一个用于它包含的person
指针。它们都是指针,因此需要为它们分配内存,New()就是这样做的。
TYPE
Person = RECORD
name: STRING[15];
last_name: STRING[15];
age: INTEGER;
end;
pListElement = ^ListElement;
ListElement = RECORD
person: ^Person;
next: pListElement;
end;
PROCEDURE AddPerson(var head: pListElement);
PROCEDURE ShowPersons(var head: pListElement);
implementation
PROCEDURE AddPerson(var head: pListElement);
Var NewPerson: pListElement;
Begin
new(NewPerson);
Write(' Podaj imie: ');
readln(NewPerson^.Person^.name);
Write(' Podaj nazwisko: ');
readln(NewPerson^.Person^.last_name);
Write(' Podaj wiek: ');
readln(NewPerson^.Person^.age);
if (head = NIL) THEN
begin
head:= NewPerson;
NewPerson^.next:= nil;
end else
begin
NewPerson^.next:= head;
NewPerson:= head;
end;
End;
PROCEDURE ShowPersons(var head: pListElement);
Begin
if (head <> NIL) THEN
begin
WriteLn(' | ', head^.Person^.name:15, ' | ', head^.Person^.last_name:15, ' | ', head^.Person^.age:3, ' |');
ShowPersons(head^.next);
end;
End;