Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi Wert von Variable (https://www.delphipraxis.net/155513-delphi-wert-von-variable.html)

JYPDWhite 26. Okt 2010 19:25

Delphi Wert von Variable
 
Hallo ihr,

ich programmiere in Delphi 2007 und habe da heute ein extrem komisches Phänomen festgestellt.

Hier nun erstmal der Quellcode
oben in der Klassendeklaration:
Delphi-Quellcode:
private abstaendeHorizontal : array[0..10] of array[0..1] of integer
Delphi-Quellcode:
procedure TEinwirkungenSkizze.zeichneHorizontaleBemassung;
var
  x: integer;
  vertauscht: boolean;
  sortiertesArray: array[0..10] of array[0..1] of integer;
  temp: array[0..1] of integer;

  positionY: integer;
  positionX: integer;
  anzahlBemassungen: integer;
  bla :integer;
begin
  // zeichnet die masslinien die horizontal verlaufen

  //zuerst array sortieren

  // array[laufendeNUmmer][0]= wert
  // array[laufendeNUmmer][1]=was fuer eine bemassung

  vertauscht := false;
  anzahlBemassungen:=0;
  bla:=0;
  for x := 0 to length(abstaendeHorizontal) do begin
    sortiertesArray[x][0] := abstaendeHorizontal[x][0];
    sortiertesArray[x][1] := abstaendeHorizontal[x][1];
    if (sortiertesArray[x][0] <> 0) then begin
      anzahlBemassungen := anzahlBemassungen + 1;
    //  inc(bla);
    end;
  end;


  repeat
    vertauscht :=false;
    for x := 0 to length(sortiertesArray)-1 do begin
      if(sortiertesArray[x][0] > sortiertesArray[x+1][0]) then begin
        vertauscht:=true;
        temp[0]:=sortiertesArray[x][0];
        temp[1]:=sortiertesArray[x][1];
        sortiertesArray[x][0]:=sortiertesArray[x+1][0];
        sortiertesArray[x][1]:=sortiertesArray[x+1][1];
        sortiertesArray[x+1][0]:=temp[0];
        sortiertesArray[x+1][1]:=temp[1];
      end;

    end;
  until (vertauscht=false);

  // bemasungslinien zeichenn
  positionY := breiteGrundriss + ABSTAND_BEMASSUNG_ZU_ZEICHNUNG;
  positionX := STARTPUNKT_X - (schnabelLaenge - FA_3);
  adapter.moveTo(positionX, positionY);

  //linie bis ganz nach unten ziehen
  adapter.lineTo(positionX, (positionY + (ABSTAND_ZWISCHEN_BEMASSUNG * anzahlBemassungen)));
end;

So wenn mann nun bei der letzten Zeile:
Delphi-Quellcode:
adapter.lineTo(positionX, (positionY + (ABSTAND_ZWISCHEN_BEMASSUNG * anzahlBemassungen)));
einen Haltepunkt setzt hat bla einen Wert von 25700. Bevor ich das bla da einegfügt habe hatte anzahlBemassungen diesen Wert. Wenn ich bla auf Klassenebene deklariere dann hat ebenfalls anzahlBemassungen den Wert 25700.

Habt ihr eine Idee was da falsch ist?

Satty67 26. Okt 2010 19:56

AW: Delphi Wert von Variable
 
Beim der ersten Schleife fehlt ein "-1"
Delphi-Quellcode:
for x := 0 to length(abstaendeHorizontal) -1 do begin
.
bei der zweiten Schleife hast Du es nicht vergessen.

PS: Während der Entwicklungsphase in Projekt -> Optionen -> Laufzeitfehler: Bereichsprüfung und Überlaufprüfung einschalten.

Es wird quasi im benachbarten Speicher des Array geschrieben, der zufällig nicht protected ist, weil er zu anderen Variablen gehört. So was gibt oft schwer zu findende Fehler, weil der Sideeffekt an ganz anderer Stelle auftritt.

Bummi 26. Okt 2010 21:01

AW: Delphi Wert von Variable
 
man muß nicht mal außerhalb des Bereiches lesen, es langt wenn eine Stelle nicht beschrieben wurde, Stackvariablen sind nicht initialisiert.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
sortiertesArray: array[0..10] of array[0..1] of integer;
i:Integer;
begin
   for I := 0 to 10  do
    begin
      Memo1.Lines.Add(IntToStr(sortiertesArray[i][0]))
    end;

end;

JYPDWhite 28. Okt 2010 18:07

AW: Delphi Wert von Variable
 
Danke für eure Antworten :-)

Wie ihr schon geschrieben habt. Bei der ersten Schleife fehlte das -1 und bei der zweiten muss das -1 ne -2 sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 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