![]() |
Re: BUG? - Boolean Variable wird willkürlich auf true gesetz
Hi,
mit diesem Code kann nix passieren.... Ich behaupte mal folgendes: Die Variablendeklartion
Delphi-Quellcode:
ist nicht original - ich vermute mal VOR HasReadRelationListFromDB wird noch ein statisches array sein, in dessen Speicher du irgendwo mit einem Index größer als die eigentliche Größe hineinschreibst.FRelationList: TStringList; HasReadRelationListFromDB: Boolean; Da das ganze nicht den Variablenbereich deines Objektes sprengt, wird kein Fehler angezeigt - es sei denn du schaltest mal RangeChecking ein. Habe selber nach so einem Fehler schon Tage gesucht. Das macht richtig Spass. :wall: |
Re: BUG? - Boolean Variable wird willkürlich auf true gesetz
Hi,
Zitat:
Es ist stark davon auszugehen, daß ein "if not x then x := true" ziemlich schnell (weg)optimiert wird. Ganz sicher kannst Du gehen, in dem Du Dir die besagte Codestelle im Debugger während der Ausführung als asm anzeigen lässt. Gruß Assertor |
Re: BUG? - Boolean Variable wird willkürlich auf true gesetz
Zitat:
Und warum eine boolsche Variable, wo doch assigned(FRelationList) genau dieses boolsche Ergebnis liefert ohne zusätzliche Variable? |
Re: BUG? - Boolean Variable wird willkürlich auf true gesetz
Ich würde mir die Adresse des boolschen Wertes raussuchen und einen Datenhaltepunkt setzen. Dort siehst Du dann, wann der Wert an dieser Speicheradresse geändert wird. Das ist aller Wahrscheinlichkeit nach der effizienteste Weg den Fehler einzukreisen.
|
Re: BUG? - Boolean Variable wird willkürlich auf true gesetz
Zitat:
@HeinzJ: sicher daß du nicht irgendwo 'nen Pufferüberlauf oder irgendwas Dergleichen hast? (welcher praktisch an "falschen" Stellen im RAM rumschreibt) |
Re: BUG? - Boolean Variable wird willkürlich auf true gesetz
Hallo HeinzJ,
der Fehler bei solchen "völlig" unerklärbaren Fehlern, sitzt meistens VOR dem Computer :-) Jetz änder Deine Klasse mal, und prüfe ob vielleicht eine Nachfolgende Klasse oder irgendjemand anderes die Variable ändert :-) Denn ich vermute, genau deswegen hast Du die Variablen im protected Teil..
Delphi-Quellcode:
AClass = class(TObject)
strict private // oder nur private FHasReadRelationListFromDB : boolean; function GetiNumMembers: smallint; protected FRelationList: TStringList; public constructor Create(X: array of const); property HasReadRelationListFromDB: Boolean read FHasReadRelationListFromDB; property RelationList: TStringList read GetRelationList; property NumberOfMembers: smallint read GetiNumMembers; end; implementation function AClass.GetRelationList: TStringList; begin if not FHasReadRelationListFromDB then // jetzt wird es gehen :-) begin FHasReadRelationListFromDB := true; // << Diese Zeile wird nie erreicht (jetzt schon) FRelationList := TStringList.Create; // read someting from a db. end; Result := FRelationList; end; im übrigen, wenn Du die Variable nur als "Information" brauchst, ob die List schon da ist, kannst Du auch mit
Delphi-Quellcode:
die Variable sparen
if not assigned(FRelationList) then begin
FRelationList := TStringList.Create; end; Result := FRelationList; |
Re: BUG? - Boolean Variable wird willkürlich auf true gesetz
Danke für alle Antworten
Abhilfe hat bei mir nur die Löschung aller DCUs sowie das Laden des Projektes über die DPR geschafft. Keine Ahnung wieso. HeinzJ |
Re: BUG? - Boolean Variable wird willkürlich auf true gesetz
Zitat:
Ich kann dann manuell in den Haltepunkten einen Daten-Haltepunkt setzen und statt einer Adresse dann den Variablennamen eingeben, dann klappt es. Geht natürlich, aber ist schon ein bisschen umständlicher (zumal mir bisher nie klar war, dass man das nur zur Laufzeit kann, hätte ja sein können, dass Delphi die Adresse bei jedem Start selbst neu ermittelt, falls möglich...), und daher die Frage, ob ich zu blöd bin, den Eintrag im Popup-Menü zu finden oder ob man wirklich diesen kleinen Umweg gehen muss? Bis denn Bommel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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-2025 by Thomas Breitkreuz