AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Allgemeines Problem in meinem Programm/ Threads!?
Thema durchsuchen
Ansicht
Themen-Optionen

Allgemeines Problem in meinem Programm/ Threads!?

Ein Thema von Simme · begonnen am 1. Mär 2010 · letzter Beitrag vom 25. Mär 2010
 
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#27

Re: Allgemeines Problem in meinem Programm/ Threads!?

  Alt 5. Mär 2010, 18:29
Keine Anhung was in {...} steht, aber da unten wird nichts in einer Schleife aus der Liste gelöscht.

Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
var
  i, e: Integer;
  gesprengt, item : ARRAY[1..4] of Boolean;
  itemx, itemy : Array[1..4] of Integer;
  zeit, x_wert, y_wert, Start : Integer;
begin
  Label5.Caption := IntToStr(Bomben.Count);
  for i := 0 to Bomben.Count - 1 do //Alle Bomben die es gibt durchgehen
  begin
    {...}
    Spieler1.bombegelegt := Spieler1.bombegelegt - 1;
    If Spieler1.bombegelegt < 0 Then Spieler1.bombegelegt := 0;
    If Spieler1.bombegelegt < Spieler1.laufzahl_bombe Then Spieler1.zuendet := 0;
  end;

  Label1.Caption := IntToStr(Spieler1.bombegelegt);
  If (Spieler1.bombegelegt = 0) Then
  begin
    Bomben.Delete(i);
  end;
end;
Du greifst einfach unten auf i zu. Ich habe mal gelesen, dass Schleifenvariablen nach der Schleife undefiniert sind oder sein können. Von daher wird dort vermutlich irgendetwas gelöscht, was es in der Liste gar nicht gibt, weil i so ziemlich alles sein kann.
Wenn du in der Schleife Objekte aus der Liste löschen würdest, solltest du die Schleife anders aufbauen. Weil sobald in der Schleife ein Objekt gelöscht wird, hat die Liste ein Element weniger. Die Schleife merkt davon allerdings nichts und geht bis zum alten Count - 1. Aber das Letzte Element in der Liste fehlt ja jetzt danke dem vorherigen Aufruf von Delete(), das führt auch zu einem Fehler. Lösung: Schleife umdrehen:

Delphi-Quellcode:
for i := Bomben.Count - 1 downto 0 do
begin
  Bomben.Delete(i);
end;
Gewöhn dich an den Debugger, damit wärst du da nämlich selbst drauf gekommen, dass du oben nicht in einer Schleife löscht. Ausserdem kann der Debugger Variablenwerte anzeigen - im Delete würdest du dann sehen, was i wirklich ist. Man kommt sehr oft in Situationen, wo das Ding mehr als nützlich ist..

HTH
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz