Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Property gibt manchmal falsche Werte zurück (https://www.delphipraxis.net/157918-property-gibt-manchmal-falsche-werte-zurueck.html)

C.Schoch 29. Jan 2011 16:40


Property gibt manchmal falsche Werte zurück
 
Hi,

Ich habe eine property welches einen record zurück gibt:

Delphi-Quellcode:

  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;
Aufgerufen wird das ganze so:

Delphi-Quellcode:
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;
Nun kommt es manchmal vor, dass in "Step" andere Werte stehen als in "FProgram[FSelectedProgram - 1].Step[index]".

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

sx2008 29. Jan 2011 17:41

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;

C.Schoch 29. Jan 2011 18:08

AW: Property gibt manchmal falsche Werte zurück
 
Schön wärs, aber selbst wenn ich die Abfrage weglasse klappts auch nicht

Delphi-Quellcode:
  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 ganze ist mir irgendwie schleierhaft

Das sieht aber so aus als würde irgendwo etwas nicht sauber kopiert denn die Ganzen Daten sind Müll

Sir Rufo 29. Jan 2011 20:47

AW: Property gibt manchmal falsche Werte zurück
 
Zitat:

Zitat von sx2008 (Beitrag 1078137)
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;

Wenn die Bedingung nicht zutrifft, dann steht im Rückgabewert Result mit viel Glück irgendwas eigentlich aber nur Müll.

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

C.Schoch 29. Jan 2011 21:11

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?

Bummi 29. Jan 2011 21:15

AW: Property gibt manchmal falsche Werte zurück
 
Die Bereichsüberprüfung in Debugger ist an?

C.Schoch 29. Jan 2011 21:50

AW: Property gibt manchmal falsche Werte zurück
 
Habe Bereichsprüfung eingeschaltet, Kein Fehler

C.Schoch 30. Jan 2011 14:14

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 10:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz