Hallo,
ich habe eben ein komisches Problem in einem etwas größeren Projekt, das ich leider nicht isolieren konnte: Das Problem tritt in Unit1 in der Procedure TGeschwindigkeitsMessung.XMLToData auf. Diese ruft am Ende eine Methode FromStrings auf, welche auch fehlerlos durch läuft. Aber beim Rücksprung von FromStrings nach XMLToData kommt ein Exception. Der Debugger springt zu irgend einer Assember-Adresse 44.
Der Fehler tritt nur bei Optimierungsstufe 2 und 3 auf.
Ich verwende derzeit eine trunc-Version (3.0.1) von Freepascal, wegen Generics. Mit der aktuellen Version lässt sich die Unit PolynomUtil nicht kompilieren.
Ich habe das Projekt als zip angehängt. Wer zufällig auch irgend eine neuere Version von FreePascal hat und das Ganze kompilieren kann, öffne im laufenden Programm einfach die Datei Reinheim.xml (Ebenfalls im zip enthalten). Dann klicke er auf die "Route 426 Da". Dadurch werden die betroffenen Funktionen aufgerufen. Es sollte eine Message Box "FromStrings ist ferig!" erscheinen, danach eigentlich "XMLToData ist fertig!", aber stattdessen kommt ein AccessViolation.
Methodenrücksprung fehlerhaft bei hoher Optimierung
-
- Lazarusforum e. V.
- Beiträge: 395
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Methodenrücksprung fehlerhaft bei hoher Optimierung
- Dateianhänge
-
LazarusBug.zip
- Alle Quellcodes, sowie eine Beispieldatei zum öffnen.
- (94.53 KiB) 114-mal heruntergeladen
-
- Beiträge: 321
- Registriert: Sa 21. Mär 2009, 17:31
- OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
- CPU-Target: 64 Bit
Re: Methodenrücksprung fehlerhaft bei hoher Optimierung
Code: Alles auswählen
SelPos : Array [0..3] of integer; ... if (k <= 5) then SelPos[k] := j;
-
- Lazarusforum e. V.
- Beiträge: 395
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Re: Methodenrücksprung fehlerhaft bei hoher Optimierung
Au, ja, das war's. In SelPos sollten Textmarkierungen gespeichert werden, damit bei einer ungültigen Eingabe die betreffende Zeile markiert werden kann. Aber so einer nebensächlichen Funktionalität habe ich nicht so viel Aufmerksamkeit gewidmet und als später weitere Spalten hinzu gekommen sind, habe ich das Array nicht erweitert
Ich hätte nicht gedacht, dass ein Überlauf eines statischen Arrays immer noch nicht festgestellt werden kann. Das ist ja wie in C++

Ich hätte nicht gedacht, dass ein Überlauf eines statischen Arrays immer noch nicht festgestellt werden kann. Das ist ja wie in C++

Re: Methodenrücksprung fehlerhaft bei hoher Optimierung
Wenn man statt Sprüche klopfen die Bereichsprüfung einschaltet, klappt das vielleicht sogar.MitjaStachowiak hat geschrieben: Ich hätte nicht gedacht, dass ein Überlauf eines statischen Arrays immer noch nicht festgestellt werden kann. Das ist ja wie in C++

-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Methodenrücksprung fehlerhaft bei hoher Optimierung
Rangechecks sind eingeschaltet? Kompiliere oft mit -CriotMitjaStachowiak hat geschrieben: Ich hätte nicht gedacht, dass ein Überlauf eines statischen Arrays immer noch nicht festgestellt werden kann. Das ist ja wie in C++
Im Falle Komplizierte OOP Kode (zb Parsetrees oder andere heterogene Bäume) auch R daran zufügen, also -CRriot
-
- Lazarusforum e. V.
- Beiträge: 395
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Re: Methodenrücksprung fehlerhaft bei hoher Optimierung
Ah, dann wird es erkannt. Aber erst zur Laufzeit. Ok, alles andere wäre auch viel verlangt.
Muss mich mal mit den Erstellmodi beschäftigen, damit die Range Checks dann vor dem Veröffentlichen 'raus fliegen.
Muss mich mal mit den Erstellmodi beschäftigen, damit die Range Checks dann vor dem Veröffentlichen 'raus fliegen.