Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Fehlermeldung 'Ungültige Zeigeroperation'
Birne - So 03.05.09 21:35
Titel: Fehlermeldung 'Ungültige Zeigeroperation'
Hallo,
ich habe ein Problem, bei dem mir nach einem Tag rumprobieren immer noch keine Lösung eingefallen ist. Ich arbeite mit Delphi 5.
Hier mein Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| For a:=low(abgearbeitet) to high(abgearbeitet)-2 Do Begin i:=abgearbeitet[a];j:=abgearbeitet[a+1]; Strecke:=Strecke+Entfernung[i,j]; Fahrzeit:=Fahrzeit+Zeit[i,j]+Aufenthaltszeit; StrGr_Koordinaten.cells[4,j]:=FloatToStrF(Fahrzeit,fffixed,7,1); End; Strecke:=Strecke+Entfernung[j,0]; Fahrzeit:=Fahrzeit+Zeit[j,0]; optStrecke:=Strecke;optzeit:=Fahrzeit; edit_2opt_Kilometer.text:=FloatToStrF(Strecke,fffixed,7,2); edit_2opt_Zeit.text:=FloatToStrF(Fahrzeit,fffixed,7,2); |
Bei
abgearbeitet handelt es sich um ein dynamisches Array.
Das kuriose ist, dass wenn ich das Programm das erste Mal laufen lasse funktioniert es ohne Probleme. Wenn ich es aber das 2. (in seltenen Fällen erst beim 4.-5.) mal durchlaufen lasse (ohne Neustart) kommt standardmäßig die Fehlermeldung:
Zitat: |
Im Projekt Project_TSP.exe ist eine Exception der Klasse EInvalidPointer aufgetreten. Meldung: Ungültige Zeigeroperation. Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen. |
Setze ich einen Haltepunkt in den Quellcode und fahre dann mit F7 bzw. F9 fort kommt unregelmäßig die obere und die folgende Fehlermeldung:
Zitat: |
Im Projekt Project_TSP.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: Zugriffverletzung bei Adresse 00403A1C in Modul Project_TSP.exe. Lesen von Adresse 00000080. Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen. |
Ich kann ja nicht einmal wirklich sagen wo der Fehler auftritt, da er teilweise in der Schleife und teilweise erst nach der letzten Zeile im Code auftritt. Manchmal durchläuft das Programm auch den Code und wenn ich dann das Programm schließe taucht auf einmal diese Fehlermeldung auf
Hat jemand einen Rat für mich???
Ach noch was anderes: Wie kann ich denn in ner vernünftigen Form Quelltext in diesem Forum einfügen?
Mit freundlichen Grüßen
Birne
Moderiert von
Narses: Delphi-Tags hinzugefügt
Narses - So 03.05.09 23:11
Moin und :welcome: im Forum!
Birne hat folgendes geschrieben : |
Wie kann ich denn in ner vernünftigen Form Quelltext in diesem Forum einfügen? |
Markiere deinen Quelltext und klicke auf das "+" neben der ComboBox, in der "Delphi" drin steht. Dann werden die Delphi-Tags ([
delphi]Quelltext[
/delphi]) um den markierten Abschnitt gesetzt. :idea: ;)
Birne hat folgendes geschrieben : |
Das kuriose ist, dass wenn ich das Programm das erste Mal laufen lasse funktioniert es ohne Probleme. Wenn ich es aber das 2. (in seltenen Fällen erst beim 4.-5.) mal durchlaufen lasse (ohne Neustart) kommt standardmäßig die Fehlermeldung:
Zitat: | Im Projekt Project_TSP.exe ist eine Exception der Klasse EInvalidPointer aufgetreten. Meldung: Ungültige Zeigeroperation. Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen. |
|
Leider ist dein Quelltext-Ausschnitt zu kurz, um vernünftige Aussagen dazu abzugeben. :nixweiss:
Häufig ist dieses Verhalten im Zusammenhang mit dynamischen Arrays aber darauf zurückzuführen, dass du über die Bereichsgrenzen des Array hinaus schreibst. Schalte mal in den Compileroptionen die Bereichsüberprüfung ein, vielleicht kommst du damit schon weiter.
cu
Narses
Chemiker - So 03.05.09 23:19
Hallo Birne,
Das -2 könnte zu einem Fehler führen, wenn high(abgearbeitet)=1 ist zum Beispiel.
Bis bald Chemiker
Kha - So 03.05.09 23:40
Chemiker hat folgendes geschrieben : |
Das -2 könnte zu einem Fehler führen, wenn high(abgearbeitet)=1 ist zum Beispiel. |
Nein, dann wird die Schleife erst gar nicht durchlaufen.
Ich schließe mich Narses an: Mit Bereichsprüfung gibt es hoffentlich eine aussagekräftigere Exception.
Chemiker - Mo 04.05.09 00:18
Hallo Kha,
Kha hat folgendes geschrieben: |
Nein, dann wird die Schleife erst gar nicht durchlaufen |
Sorry, da habe ich wohl etwas daneben gegriffen.
Bis bald Chemiker
Birne - Mo 04.05.09 08:56
Morgen,
na das ist ja mal richtig fetzig. Da hab ich doch glatt den gesamten gestrigen Sonntag geopfert um den Fehler ergebnislos ausfindig zu machen, und dann sagt ihr "schalt doch mal die Bereichsprüfung ein". Und genau das war der Tip den ich gestern gebraucht hatte. Natürlich lag der Fehler an ner völlig anderen Stelle im Quellcode... (2 andere "For-Schleifen" in anderen Prozeduren gingen über ihren definierten Bereich hinaus)
Danke für die schnelle super Antwort...
Gruß Birne
Birne - Mo 04.05.09 13:18
Jo, danke, wieder was dazugelernt. Schönes Beispiel. Hab's jetzt auch verstanden. Hatte ja davor schon über den Grund gegrübelt. Da ich aber kein Informatiker bin, war's mi aber dann egal, hauptsache es funktioniert... ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!