AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ungültige Zeigeroperation

Ein Thema von Delphi-Narr · begonnen am 20. Feb 2010 · letzter Beitrag vom 21. Feb 2010
Antwort Antwort
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

Ungültige Zeigeroperation

  Alt 20. Feb 2010, 17:37
Hallo, ich habe ein Spiel geschrieben. Bestandteil davon ist es, dass Sterne durch den Bildschirm "fliegen", von rechts nach links.
Dafür verwende ich einen Timer mit dem Namen "Move"

Hier der Quellcode des Timers:

Delphi-Quellcode:
procedure TForm1.MoveTimer(Sender: TObject);
var i,Y,X,S,X1,X2,Y1,Y2:integer;
begin
     //Neue Positionen der Sterne bestimmen
     for i:=0 to Length(Sterne) do
     begin
          Sterne[i].x:=Sterne[i].x-Speed[i];
          if Sterne[i].x<0 then
          begin
          //Neuen Stern generieren, wenn der alte aus dem Bildschirm ist
          Y:=Random(Succ((Screen.height-20)-20))+20;
          X:=Screen.width+20;
          S:=Random(Succ(5-2))+2;
          Sterne[i].x:=X;
          Sterne[i].y:=Y;
          Speed[i]:=S;
          end;
     end;
     //Sterne neu zeichnen
     with Raum.Canvas do
     begin
          Brush.color:=clblack;
          FillRect(Rect(0,0,Screen.width,Screen.height));
          Brush.color:=$00A4FFFF;
          for i:=0 to Length(Sterne) do
          begin
               //Nur um die Übersicht nicht zu verlieren:
               X1:=Sterne[i].x;
               Y1:=Sterne[i].y;
               X2:=Sterne[i].x+Speed[i];
               Y2:=Sterne[i].y+Speed[i];
               //Stern zeichnen
               Ellipse(X1,Y1,X2,Y2);
          end;
     end;
end;
Die Sterne werden auf einem TImage dargestellt, Name: Raum

Um die Sternpositionen und ihre Geschwindigkeit zu speichern, werden sie in FormCreate zufällig generiert und in zwei Arrays gespeichert:

Sterne: Array of TPoint;
Speed: Array of Integer;

Je nach Geschwindigkeit wird auch die Größe erstellt (Schnelle Sterne sind nah und deshalb größer).
Bis gerade hat alles geklappt, doch jetzt bekomme ich BEIM SCHLIEßEN des Programms eine Fehlermeldung:

Invalid Pointer in Project1.exe in ...
Ungültige Zeigeroperation

Der Timer läuft jedoch einwandfrei durch. Wenn ich den Timer jedoch aus dem Programm rausnehme, indem ich ihn nicht aktiviere, kommt keine Fehlermeldung.

Wo liegt das Problem?

Liebe Grüße!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Ungültige Zeigeroperation

  Alt 20. Feb 2010, 17:40
Wird der Timer vor dem Schliessen der Anwendung denn gestoppt oder läuft er dann gerade noch?
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Ungültige Zeigeroperation

  Alt 20. Feb 2010, 17:42
Er läuft noch, ich kann mal ein OnClose Ereognis einbauen...


Edit: Keine Wirkung...
Hat vorher auch alles so geklappt. Wenn ich den Timer aus lasse und dann sofort schließe passiert nichts, wenn ich den Timer aktiviere passiert dieser Fehler...
Ohne das irgendeine andere Prozedur ausgelöst wurde (Außer FormCreate, dort liegt der Fehler auch nicht).
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Ungültige Zeigeroperation

  Alt 20. Feb 2010, 17:44
Zitat:
for i:=0 to Length(Sterne) do
Das muss ja knallen. Besserfor i:=0 to Length(Sterne) -1 do [edit] Oder noch besser
for i:=Low(Sterne) to High(Sterne) do [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Ungültige Zeigeroperation

  Alt 20. Feb 2010, 17:46
Stimmt, daran hats gelegen.
Gibt es denn irgendeinen Grund, warum das vorher nicht passiert ist?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Ungültige Zeigeroperation

  Alt 20. Feb 2010, 18:24
Keine Ahnung, muss wohl Zufall gewesen sein, denn eigentlich sollte es an der Stelle immer zur Exception kommen (es sei denn, die Schleife würde gar nicht für alle Elemente durchlaufen).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#7

Re: Ungültige Zeigeroperation

  Alt 20. Feb 2010, 20:19
Wenn hinter dem Array zufällig noch genug Speicherplatz für das "zusätzliche" Feld war, dann konnte da auch drauf zugegriffen und damit gearbeitet werden.
Und wenn zusätzlich dieser Speicherbereich entweder nicht verwendet oder nur zufälig zu dieser Zeit keine relevanten Daten enthielt, dann wurde durch den Zugriff außerhalb des Arrays auch nichts zerschossen.

Tipp: Schalte zukünftig wärend der Entwicklung mal die Bereichsprüfung ein (siehe Projektoptionen),
dann wäre dieser Indexfehler schon eher aufgefallen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Ungültige Zeigeroperation

  Alt 20. Feb 2010, 20:42
Projektoptionen gehen bei mir nicht... Hab Vista und immer wenn ich dadrauf klicke, kommen zwei Zugriffsverletzungen.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: Ungültige Zeigeroperation

  Alt 21. Feb 2010, 00:53
Dann Starte doch Delphi als Admin uns sell es ein.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Ungültige Zeigeroperation

  Alt 21. Feb 2010, 21:08
Funktioniert leider auch nicht, hab schon alles probiert...
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:12 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