Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Fehler nur vorhanden, wenn keine showmessage?


violinenspieler1000 - Mi 08.04.09 18:06
Titel: Fehler nur vorhanden, wenn keine showmessage?
Hallo,

ich habe in einem Programm folgenden Code stehen:


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TTGUI.Button8Click(Sender: TObject);
begin
//showmessage('');
Controll.Check_inputs();
end;


Dabei kommt ein Fehler der Art "Zugriffsverletzung bei Adresse...".

Schreibt man aber

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TTGUI.Button8Click(Sender: TObject);
begin
showmessage('');
Controll.Check_inputs();
end;


wird das Programm ordnungsgemäß ausgeführt.

Ich habe keine Idee woran das liegen kann. Und schlage mich schon seit Stunden an diesem Fehler herum.

Irgendwelche Ideen wo der Fehler stecken könnte?


Gausi - Mi 08.04.09 18:34

Benutzt du irgendwo Threads? Oder Application.ProcessMessages, so dass der Button evtl. nochmal geklickt wird, bevor der erste Klick abgearbeitet ist?


violinenspieler1000 - Mi 08.04.09 18:50

Nein, es werde nirgenswo Threads und Application.ProcessMessages verwendet.

Noch andere Ideen?


Hidden - Mi 08.04.09 18:57

Was macht CheckInputs() denn genau? :)


violinenspieler1000 - Mi 08.04.09 19:04

CheckInputs() in TController ruft viele andere Klassen auf und führt einige Berechnungen durch.

Ich würde Code ja gerne posten aber leider sind das insgesamt 10 Units...


Gausi - Mi 08.04.09 19:05

Dann setz mal Breakpoints und geh Stück für Stück durch, wo der Fehler genau auftritt. ;-)


jaenicke - Mi 08.04.09 19:11

Kann es sein, dass du dynamische Arrays oder Pointer oder ähnliches benutzt und dabei ein Fehler passiert? Denn ohne Threads (wo parallel noch etwas passieren könnte, das können auch Threads zur Hardwareansteuerung (ComPort) oder dem Internetempfang (Indy) sein) wäre das eigentlich die einzige logische Erklärung warum durch ein ShowMessage das dann funktioniert.

Aktiviere einmal die Bereichsüberprüfung:
Projekt --> Optionen... --> Compiler --> Laufzeitfehler --> Bereichsüberprüfung
oder in neuen Versionen:
Projekt --> Optionen... --> Delphi-Compiler --> Compilieren --> Laufzeitfehler --> Bereichsüberprüfung
Das deckt in den meisten Fällen auf, wenn du z.B. einen Index größer als der maximale Index in einem dynamischen Arrays benutzt.