Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Hallo @all,
frei nach dem Tutorial "Partikel Systeme I" habe ich versucht mir eine eigene Partikelengine zu schreiben. Ich stehe halt noch ganz am Anfang, weil ich ein Problem habe und nicht verstehe warum es auftritt.
Normalerweise, wenn man eine Exception hat und man auf "anhalten" drückt wird bei delphi die
Zeile markiert, in der die Exception aufgetreten ist, aber bei meiner Exception wird keine Zeile markiert, daher weiß ich auch net wo der Fehler liegt.
Folgende Exception kommt.
+===================================================================+
| Project start.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'.
| Process stopped. Use Step or Run to continue.
+===================================================================+
Wenn man die Anwendung abbricht (Escape-Taste) bevor der Counter (links oben im Fenstertitel)
die 100 erreicht kommt kein Fehler,
DOCH wenn der Counter um die 100 beträgt oder einmal drübergelaufen ist, und man die Anwendung
beendet kommt obiger Fehler!
Dabei habe ich doch gar keine Pointer benutzt, komisch
Den Aufbau der Klassen habe ich ungefähr so wie im Tutorial beschrieben nachgebastelt.
Den Quellcode habe ich hochgeladen.
Bitte helft mir den Fehler zu finden!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Code:
setlength(Particles, ArrayLength);
und
For i:=0to ArrayLength do
Das geht in die Hose. An der Stelle greifst du bereits auf ein Element zu welches nicht existiert. Du setzt als Länge 100. Somit hat das Array 100 Elemente. Dann greifst du aber auf die Elemente von 0 bis 100 zu. Das sind 101 Elemente. Ich habe mal setlength(Particles, ArrayLength + 1); gemacht. Aber das hatte auch nich nicht gewünschten Effekt. Also nächstes hatte ich mal setlength(Particles, ArrayLength + 100); dann ging es. Also ich kann dir nur empfehlen genau darauf zu achten wie viele Elemente du hast. Du kannst als Schleife auch For i:=0 to High(ArrayLength) do machen. Damit bist du immer auf der sicheren Seite.
Für den Späteren Zeitpunkt würde ich dir Empfehlen evtl. die Partikel als Objekte zu gestalten. Das macht den Aufwand im nachhinein kleiner. So musst du nicht ständig die Werte zuweisen sondern brauchst lediglich nur noch das Objekt in die Liste kopieren oder daraus löschen. Aber vorsicht! Du brauchst dann natürlich für jeden Partikel ein Objekt. Oder Pointer auf Records würden auch gehen. Aber wie gesagt. Für Später.
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Hey,
danke für deine schnelle Antwort!
dann kann ich endlich weiter machen mit meiner "Partikelengine". Ich weiß, sieht halt momentan noch sehr sehr primitiv aus, ich wollte aber erst den algorithmus
testen, ob der funzt. (jetzt tut ers auch, nur noch ein paar änderungen (Performance-mäßig) sind nötig...).
Finde immer wieder toll, das man Antworten so schnell bekommt.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
pheasant hat geschrieben:
Dabei habe ich doch gar keine Pointer benutzt, komisch
Den Aufbau der Klassen ...
Klassenvariablen werden intern auch als Pointer verwendet. Die Aussage "Ich habe keine Pointer verwendet." kann man eigentlich nur noch bei Konsolenprogrammen treffen, die keine Klassen enthalten. Ansonsten hast du immer irgendwo Pointer im Einsatz...
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
insbesondere werden dynamische arrays und Strings usw. auch über pointer abgehandelt, weshalb auch Konsolenanwendungen ohne Klassen nicht "pointerfrei" sind.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.