![]() |
Delphi-Version: 5
TList.Count führt zu SIGSEGV Fehler
Hallo,
mein Programm bricht ab und es öffnet sich ein Assemblerfenster: CLASSES_TLIST_$__GETCOUNT$$LONGINT 0042D2C3 8b4008 mov 0x8(%eax),%eax Die für mich kryptische 2.Zeile ist hierbei mit einem grünen Pfeil gekennzeichnet, also schließe ich daraus, dass an dieser Stelle das Programm vom Debugger angehalten wird. Zusätzlich gibt mein Lazarus die Meldung eines SIGSEGV-Fehlers aus. Kommentiere ich die Zeile
Delphi-Quellcode:
in meinem Projekt aus, tritt dieser Fehler nicht mehr auf.
AnzWoerterInListe := pWortquelle.mWurzel[Wortlaenge].mWoerter[IndexBuchstabe].Count;
pWortquelle.mWurzel[Wortlaenge].mWoerter[IndexBuchstabe] ist <> nil. Weitere Informationen bei Nachfrage. Vielen vielen Dank schonmal für die Antworten! |
AW: TList.Count führt zu SIGSEGV Fehler
Zitat:
|
AW: TList.Count führt zu SIGSEGV Fehler
Wieso sollen sie nicht gültig sein, bzw. wie überprüfe ich die Gültigkeit?
|
AW: TList.Count führt zu SIGSEGV Fehler
Zitat:
|
AW: TList.Count führt zu SIGSEGV Fehler
Bei den Objekten handelt es sich um Instanzen von TList.
Der Destruktor der Objekte wurde an dieser Stelle noch nicht benutzt. Meines Wissens nach müssten die Objekte gültig sein. |
Präzisierung des Problems
Also genau genommen bin ich mir nicht 100% sicher, ob der Fehler an dieser Stelle liegt, aber da diese Zeile die einzige ist, in der ich die Count-Funktion der Liste benutze, gehe ich davon aus. Wenn ich das Programm in Einzelschritten durchlaufen lasse, komme ich nicht zu dem Fehler (die Funktion wird in einer Schleife aufgerufen, die sich so oft wiederholt, dass ich sie nicht komplett in Einzelschritten durchlaufen lassen kann).
|
AW: Präzisierung des Problems
Zitat:
Wieder einen Haltepunkt setzen, diesmal mit anhalten, aber mit der Bedingung auf diesen Durchlauf (wenn es denn immer der selbe ist, also z.B. i = 133). Dann landest du genau dann dort, wenn es knallt. |
AW: TList.Count führt zu SIGSEGV Fehler
Ist Range-Checking eingeschaltet?
|
AW: TList.Count führt zu SIGSEGV Fehler
Zitat:
Also ich habe jetzt die Werte gefunden, wann
Delphi-Quellcode:
zu dem Fehler führt.
AnzWoerterInListe := pWortquelle.mWurzel[Wortlaenge].mWoerter[IndexBuchstabe].Count;
IndexBuchstabe muss, damit der Fehler auftritt, < 1 und > 26 sein.
Delphi-Quellcode:
Mit den if-Abfragen habe ich herausgefunden, dass dies aber nie der Fall ist.
if IndexBuchstabe <= 0 then
begin x := x; end; if IndexBuchstabe > 26 then begin y := y; end; AnzWoerterInListe := pWortquelle.mWurzel[Wortlaenge].mWoerter[IndexBuchstabe].Count; |
Lösung
Der Fehler war, dass Wortlaenge = 0 war.
Danke für die Hilfe! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz