![]() |
Property gibt manchmal falsche Werte zurück
Hi,
Ich habe eine property welches einen record zurück gibt:
Delphi-Quellcode:
Aufgerufen wird das ganze so:TStep = record Name : array[0..NUM_OF_LANGS - 1] of string; OutputMode : array[0..NUM_OF_OUTPUTS - 1] of Integer; Input : array[0..NUM_OF_INPUTS - 1] of TInput; Intervall : array[0..NUM_OF_INTERVALLS - 1] of TIntervall; AnalogIn : array[0..NUM_OF_ANALOG_IN - 1] of TAnalogIn; AnalogOut : array[0..NUM_OF_ANALOG_OUT - 1] of Real; AlarmStep : Integer; AlarmCond : Integer; NextCond : Integer; ContrTime : Integer; Loops : Integer; NextStep : Integer; Message : Integer; Time : Integer; end; function GetStep(Index : Integer) : TStep; procedure SetStep(Index : Integer; const Value : TStep); property Step[index : Integer] : TStep read GetStep write SetStep; function TCleanProgParser.GetStep(Index : Integer) : TStep; begin if not InRange(index, 0, NUM_OF_STEPS - 1) then begin raise Exception.CreateFmt('Selected Step Out of Range Min: %d, Max: %d, Is: %d', [0, NUM_OF_STEPS - 1, index]); end; if InRange(FSelectedProgram, 1, FFormatCount) then begin Result := FProgram[FSelectedProgram - 1].Step[index]; end; end;
Delphi-Quellcode:
Nun kommt es manchmal vor, dass in "Step" andere Werte stehen als in "FProgram[FSelectedProgram - 1].Step[index]".
procedure TForm5.ChangeStep;
var i : Integer; Data : TInputData; NodeData : PInputData; Node : PVirtualNode; Step : TStep; begin Step := Parser.Step[seStepInput.AsInteger]; eStepNameInput.Text := Step.Name[seLanguage.asInteger - 1]; eStepNameOutput.Text := Step.Name[seLanguage.asInteger - 1]; ... end; Das ist aber nicht immer so, aber wenn es einmal aufgetreten ist kommt es immer nahezu jedes mal vor Hat einer von euch eine Idee woher das kommen könnte |
AW: Property gibt manchmal falsche Werte zurück
Da fehlt der Else-Teil:
Delphi-Quellcode:
if InRange(FSelectedProgram, 1, FFormatCount) then
begin Result := FProgram[FSelectedProgram - 1].Step[index]; end else ;// der Else-Teil fehlt - Result ist undefiniert end; |
AW: Property gibt manchmal falsche Werte zurück
Schön wärs, aber selbst wenn ich die Abfrage weglasse klappts auch nicht
Delphi-Quellcode:
Das ganze ist mir irgendwie schleierhaft
if InRange(FSelectedProgram, 1, FFormatCount) then
begin Result := FProgram[FSelectedProgram - 1].Step[index]; // <-- Hier scheint auf falsche Speicherbereiche zugegriffen zu werden, denn im Ausgabefenster steht schon was anderes als in den lokalen Variablen! end; Das sieht aber so aus als würde irgendwo etwas nicht sauber kopiert denn die Ganzen Daten sind Müll |
AW: Property gibt manchmal falsche Werte zurück
Zitat:
Also genau das was du beschreibst. Wenn es geht dann leg in den Else Zweig mal ein ShowMessage( 'nix im Result' ) Dann siehst du, ob der Datenmüll von da kommt |
AW: Property gibt manchmal falsche Werte zurück
Das mit der MessageBox habe ich bereits versucht. Die habe ich nie bekommen, aber trotzdem fehlerhafte Daten.
Ich habe das auch schon mit dem Debugger Schritt für Schritt durchgekaut obwohl alle Indizes im gültigen Bereich liegen kommt manchmal nur Schrott. Könnte es an den Strings im Record liegen? |
AW: Property gibt manchmal falsche Werte zurück
Die Bereichsüberprüfung in Debugger ist an?
|
AW: Property gibt manchmal falsche Werte zurück
Habe Bereichsprüfung eingeschaltet, Kein Fehler
|
AW: Property gibt manchmal falsche Werte zurück
Hi,
Habe den Fehler gefunden, Die Daten wurde an anderer stelle mit undefinierten werten überschrieben [Erledigt] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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