---
title: "list.Delete()"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/53830-list-delete"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Alpha II"
published: "2002-09-20T22:14:18.000Z"
updated: "2002-09-21T20:01:52.000Z"
replies: 5
views: 181
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/53830-list-delete"
---

# list.Delete()

## #1 — Alpha II, 2002-09-20T22:14Z

Varför får jag felet "List index out of bounds (xxx)" i den här koden:

```
procedure BackgroundAnim;
var
  I : Integer;
  AStar : PStar;
begin
    if Starfield.Count < 256 then begin
      New(AStar);
      AStar^.X := 640 / 2;
      AStar^.Y := 480 / 2;
      AStar^.VelX := (Random(256)-128)/100;
      AStar^.VelY := (Random(256)-128)/100;

      Starfield.Add(AStar);
    end;

    Anim := 0;
    for I := 0 to Starfield.Count-1 do begin
      AStar := Starfield.Items[I];
      AStar^.X := AStar^.X + AStar^.VelX;
      AStar^.Y := AStar^.Y + AStar^.VelY;
      MainForm.DXDraw.Surface.Canvas.Pixels[Round(AStar^.X), Round(AStar^.Y)] := clWhite;

      if ((AStar^.X < 0) or (AStar^.X > 640)) or
         ((AStar^.Y < 0) or (AStar^.Y > 480)) then
         Starfield.Delete(I); [b]<--- Det är här felet uppstår!!!!!!!!!!![/b]
  end;

  MainForm.DXDraw.Surface.Canvas.Release;
end;
```

Permalänk: https://www.webforum.nu/p/53830

## #2 — Marcus E, 2002-09-20T22:34Z

Därför att om du tar bort ett item ändras indexet för alla som kommer efteråt. Du måste därför minska I med ett efteråt, eller gå från Count-1 till 0 istället.

Permalänk: https://www.webforum.nu/p/793351

## #3 — Alpha II, 2002-09-20T23:10Z

Jag gjorde en while slinga istället.
Man kan inte ändra I i loopen.
Hur går man från Count-1 -\> 0?

Permalänk: https://www.webforum.nu/p/793355

## #4 — Marcus E, 2002-09-21T11:15Z

kanske
for I := Starfield.Count-1 to 0 do begin

Jag kan inte Pascal, utan har endast använt VCL i BCB.

Permalänk: https://www.webforum.nu/p/793510

## #5 — Alpha II, 2002-09-21T11:45Z

tror jag har testat det och det har inte fungerat, men jag är inte säker

Permalänk: https://www.webforum.nu/p/793537

## #6 — jt, 2002-09-21T20:01Z

Använd downto istället för to.

Permalänk: https://www.webforum.nu/p/793773

---

Tråden på webben: https://www.webforum.nu/amne/programmering/53830-list-delete
