Ähm... egal welcher fehler es ist. Delphi an sich hat wenig damit zu tun. Man muss sich stets fragen, WARUM der fehler zu WELCHEM Zeitpunkt kommt.
- Auf Pointer wird eine Klasse oder Variable gesetzt.
- Speicher von Pointer wird gefüllt.
- Speicher von Pointer wird ausgelesen.
- Speicher wird freigegeben
- Speicher von Pointer wird ausgelesen :: INVALID POINTER OPERATION!
hab jetzt gesehen, dass auch ein paar VCL Warnungen beim Compilieren angezeigt werden.
Ich kann mir gut vorstellen, dass es in diese Richtung ein Fehler ist, weil ich beim Zusammenstellen der GUI ziemlich chaotisch Buttons etc erstellt und mal hin und her umbenannt habe. Ich werde das jetzt mal neu aufbauen.
Hab das ganze hier mal angehängt.. aber achtung, alles sehr chaotisch
Edit:
Um das Attachement möglichst klein zu halten, hab ich alle nicht notwendigen Dateien gelöscht..... und jetzt geht es plötzlich ohne Fehler.
Versteh ich echt nicht, ich hab ja zwischendrin das ganze ja schonmall neu compiliert.
Naja, egal. bin jetzt wirklich froh dass alles funktioniert. Vielen Dank an euch alle.
Ich hab die Anlage jetzt wieder runtergenommen. Falls aber jemand daran interessiert ist (ich wüsste nicht wieso ) kann ich sie auch wieder hochladen.
_________________ "OpenGL verbindet"<br>- für die Völkerverständigung zwischen Delphi und C++ ^^
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
@cyanide: Um einen solchen Fehler zu bekommen genügt es auch, wenn du in Speicherstellen schreibst die zu einem anderen Objekt gehören und du dann auf dieses zu greifst. Der Fehler ist in etwa so aussagekräftig wie DER Windows95 Fehler. Also der "Es ist ein schwerer Fehler aufgetreten." Fehler.
@Mindwalker: Also was wüste GUI Konstelationen angeht kann ich auch ein Wörtchen mitreden aber bisher ist mir so etwas noch nie passiert, dass solch ein Dehler daraus resultiert. Deswegen solltest du auch davon ausgehen, dass der Fehler möglicherweise noch existiert derzeit aber nur nicht zum ausbruch kommt, weil er in eine ungefährliche Gegend verlagert wurde. (oder so was)
Aber dennoch ist es immer wieder schön, dass sich Fehler selbst auflösen.
@cyanide: Um einen solchen Fehler zu bekommen genügt es auch, wenn du in Speicherstellen schreibst die zu einem anderen Objekt gehören und du dann auf dieses zu greifst.
Du meinst jenes Zeitgleich? Weil sonst sollte dieses Example ohne weitere Probleme funtzen
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Nein. Ich meinte es so, wenn du zum Beispiel ein Array und noch ein Array definiert hat. Und bei array 1 aus versehen ein oder zwei elemente zu viel schreibst. Dann schreibst du ja in den Speicherbereich des zweiten Arrays hinein. Und dann solltest du nicht mehr auf das zweite zugreifen weil es dann "zerstört" wurde. Bei Array liegt an der ersten Stelle (meines Wissens) (vor ALLEN Elementen) die Größe. Die man nicht manuell verändern sollte weil man eigentlich auch nicht drauf zugreifen kann. Das Problem ist dabei ganz einfach, dass du in Speicher von anderen Objekten rumschreibst in dem man da gar nix zu suchen hat. Und dann kann es auch zu solch einem Fehler kommen. Wenn man eine hochgradig dynamische Struktur hat kann so etwas schnell mal passieren.
Ich hoffe das war jetzt nicht ganz so verwirrend.
Nun hab ich die gui neu aufgebaut und der Fehler erscheint immer noch. Anscheinend zerschießt mein Programm doch irgendetwas.
Naja, ist mir jetzt auch egal, dann specke ich die Gui halt ab.
_________________ "OpenGL verbindet"<br>- für die Völkerverständigung zwischen Delphi und C++ ^^
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Delphi ordnet die Variablen und alles ja selber im Speicher an. Er richtet die dort Teilweise an den Word bzw. DWord grenzen aus. Es kann sein, dass du aus versehen irgendwo über deinen verfügbaren Bereich hinweg greifst (Array mit zu großem Elementindex). Und durch die spezielle Ausrichtung der Variablen und die Größe deiner Fensterelemente kommt es teilweise zu solchen Fehlern. Also eigntlich könnte ich wissenschaftler werden. Bei solch wüsten Thesen. Aber die sind ja bekanntlich die Wahrscheinlichsten oder so was.
Ne im Ernst. Für mich ist das einzig wahrscheinlichste Möglichkeit. Vielleicht solltest du deine Arrays mal genauer unter die Lupe nehmen.
Also ich hab' mir den Source-Code nicht angeschaut, aber den Fehler auch mal bekommen. Meistens ist das Problem recht simpel:
- Entweder Du schreibst in 'nen Speicherbereich, in den Du nicht schreiben darst (bsp Move(Speicher, Speicher2, 512) anstelle von Move(Speicher^, Speicher2^, 512)) oder dur versucht, in meinem Beispiel, 512 Bytes zu schreiben hast aber nur 500 oder 511 belegt. Oder Du greifst auf Speicher zu, der Freigegeben wurde (was Deiner Beschreibung entsprechen würde).
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
so, ich hab den Fehler jetzt endlich beseitigt. Es war wie ihr vermutet habt nen Array Überlauf.
Hierbei muss ich sagen, dass ich den Fehler schon viel früher entdeckt und korrigiert habe. Nur hat meine Projektdatei, wegen meine vielen Sicherungsspeicherungen und Verschiebungsspielchen auf eine ganz andere "klassen.pas" Datei zurückgegriffen, anstatt auf die im selben Ordner... und ich aber nur die im selben Ordner korrigiert hab, was natürlich keine Wirkung brachte Als ich dann die "Überlaufkontrolle" in den Optionen entdeckt und aktiviert habe, war ich doch sehr erstaunt, wie mir plötzlich die Wurzel alles Übels in einer Datei von "ganz wo anders" angezeigt wurde.
Vielen Dank an all die Experten hier, besonders Lossy hat ja schon relativ früh den richtigen Riecher gehabt. Hätte ich diese "Überlauf" Option früher zwischen den, für mich größtenteils, kryptischen Compiler Optionen wär das ganze wahrscheinlich auch erheblich schneller über die Bühne gegangen
_________________ "OpenGL verbindet"<br>- für die Völkerverständigung zwischen Delphi und C++ ^^
Zuletzt geändert von Mindwalker am Mo Nov 10, 2003 18:27, insgesamt 1-mal geändert.
Mitglieder in diesem Forum: 0 Mitglieder und 9 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.