*Groan* once again, programing is primarily a lesson in humility.
rpewing@lbl.gov wrote:
I just upgraded to a more recent version of GPC, 2001something. I don't know if that's the root cause, but I'm having trouble killing a linked list. I get a page fault or a GPF (I'm running under win98) when trying to delete the last or next to last record. I've marked the line named in the call traceback.
.. I forgot to initialize the pointer to Nil. I think BP did this for me, so I got out of the habit. A corrected version is below.
Toby
Program ListTest;
type PRec = ^Rec; Rec = record ri : integer; Next : PRec; end;
var Root : PRec; i : integer; {----------}
Procedure LWipe(var Root : PRec); var point : PRec; begin while (Root <> Nil) do begin write('deleting ', root^.ri, ' '); point := Root; Root := Root^.next; Dispose(point); end; end; {----------}
Procedure LInsert(var num : integer; var Root : PRec); {insert a new record at the *front* of the list} var Site : Rec; temp : PRec; begin with Site do begin ri := num; next := Nil; end; if Root = Nil then begin {starting the list} New(Root); Root^ := Site; end else begin {list already exists} New(temp); {get new memory} temp^ := Site; {move memory} temp^.next := Root; {repoint pointers} Root := temp; end; end; {LInsert} {----------}
Begin
Root := Nil; {<< the line I forgot}
for i := 1 to 100 do LInsert(i, Root); LWipe(Root); End.