Co jest źle w tym kodzie? Prawidłowo odczytuje pierwszy rekord ale przy drugim wywala access violation
Jest to usuwanie zaznaczonego w StringGrid rekordu z listy jednokierunkowej .
procedure TForm1.Button5Click(Sender: TObject);
var
i: Integer;
AIndex:integer;
begin
Aindex:=stringgrid1.Row;
if AIndex = 0 then
begin
newnamenode:= FFirst;
FFirst := FFirst^.Next;
if FFirst = nil then
FLast := nil;
end
else
begin
newnamenode := FFirst;
showmessage(newnamenode^.Imie);
APrev := nil;
while AIndex > 0 do
begin
APrev := newnamenode;
newnamenode := newnamenode^.Next;
Dec(AIndex);
end;
if newnamenode^.Next = nil then
begin
FLast := APrev;
APrev^.Next := nil;
end
else
begin
APrev^.Next := newnamenode^.Next;
end;
end;
//skip over element to be deleted (currentpointer)
dispose(newnamenode);
Dec(FCount);
for i := StringGrid1.Row to stringGrid1.RowCount - 2 do
StringGrid1.Rows[i].Assign(stringGrid1.Rows[i + 1]);
StringGrid1.RowCount := StringGrid1.RowCount - 1;
end;