Autor |
Beitrag |
Birne
Hält's aus hier
Beiträge: 6
|
Verfasst: So 03.05.09 21:35
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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 03.05.09 23:11
Moin und  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.
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.
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
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
|
Verfasst: So 03.05.09 23:19
Hallo Birne,
Delphi-Quelltext
Das -2 könnte zu einem Fehler führen, wenn high(abgearbeitet)=1 ist zum Beispiel.
Bis bald Chemiker
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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:
www.delphi-forum.de/....php?p=527022#527022
|
|
Birne 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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... 
|
|
|