Autor Beitrag
Birne
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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.
BeitragVerfasst: So 03.05.09 23:19 
Hallo Birne,

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 6



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