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 user profile iconNarses: Delphi-Tags hinzugefügt


Narses - So 03.05.09 23:11

Moin und :welcome: im Forum!

user profile iconBirne hat folgendes geschrieben Zum zitierten Posting springen:
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: ;)


user profile iconBirne hat folgendes geschrieben Zum zitierten Posting springen:
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,


Delphi-Quelltext
1:
high(abgearbeitet)-2                    


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

user profile iconChemiker hat folgendes geschrieben Zum zitierten Posting springen:
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


jaenicke - Mo 04.05.09 11:23

Ich hoffe dir ist auch klar warum sich dieser Fehler dann ganz anderswo gezeigt hat?
Sonst habe ich hier einmal eine einfache Erklärung dazu geschrieben: ;-)
http://www.delphi-forum.de/viewtopic.php?p=527022#527022


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... ;)