Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variable ändert sich, ohne dass sie angesprochen wurde!?! (https://www.delphipraxis.net/21945-variable-aendert-sich-ohne-dass-sie-angesprochen-wurde.html)

Nicolai1234 10. Mai 2004 15:31


Variable ändert sich, ohne dass sie angesprochen wurde!?!
 
Ich habe eine procedure. In dieser procedure ändert sich die global definierte variable x[1] (Array of Integer), obwohl sie in dem Teil nicht angesprochen wird!!!
Ich habe über showmessage herausgefunden, dass sie sich in dem unten markierten Teil ändert, aber da steht sie nirgendwo drin!
Sie ändert sich erst nach dem ersten durchlaufen der for-Schleife!
Gibt es da eine erklärung für?


Delphi-Quellcode:
procedure leeren;
var xleeren,yleeren,i:integer;
begin
for xleeren := 1 to 19 do
for yleeren := 1 to 19 do
koordinaten[xleeren,yleeren] := 3;

for i := 0 to 6 do //<---------------------------------------In diesem Teil verändert sich x[1]
        begin
        if i <> 0 then yleeren := i*3+1 else yleeren := 1;
        for xleeren := 1 to 20 do                          
        koordinaten[xleeren,yleeren] := 0;
        end;

for i := 0 to 6 do
        begin
        if i <> 0 then xleeren := i*3+1 else xleeren := 1;
        for yleeren := 1 to 20 do
        koordinaten[xleeren,yleeren] := 0;
        end;

//Café
koordinaten[9,9] := 2;
koordinaten[8,8] := 2;
koordinaten[9,8] := 2;
koordinaten[8,9] := 2;
koordinaten[9,10]:= 4;
//Schule
koordinaten[18,18] := 2;
koordinaten[17,17] := 2;
koordinaten[17,18] := 2;
koordinaten[18,17] := 2;
koordinaten[17,16]:= 4;

end;

sakura 10. Mai 2004 15:33

Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
 
Wie ist denn das Array Koordinaten deklariert?

...:cat:...

alcaeus 10. Mai 2004 15:34

Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
 
Arbeitest du mit einem dynamischen Array? Vielleicht änderst du ja die Variable ungewollt mit einem Buffer Overflow. Gib mal in der Schleife den Wert von x[1] mit ShowMessage bei jedem Schritt aus. Damit kannst du überprüfen, wo die Änderung passiert.
Und falls du mit dynamischen Arrays arbeitest:
Im ersten Teil sprichst du die Arrayfelder 1 bis 19 an. Im zweiten Teil startest du mit 0. Vielleicht ist es gewollt, vielleicht nur ein kleiner Fehler

Nicolai1234 10. Mai 2004 15:41

Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
 
Delphi-Quellcode:
Koordinaten: Array [1..19,1..19] of byte;
  x,y: Array [1..10] of integer;
Dass ich bei 0 anfange ist gewolt, da dann die Rechnung 0*3+1 entsteht und so auf jeden Fall mehr als 0 rauskommt!

sakura 10. Mai 2004 15:44

Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
 
Zwei Fehler habe ich gefunden, aber erst danach; 20 ist >19 ;)

Code:
        if i <> 0 then yleeren := i*3+1 else yleeren := 1;
        for xleeren := 1 to [color=#ec0000]20[/color] do                          
        koordinaten[xleeren,yleeren] := 0;
        end;

for i := 0 to 6 do
        begin
        if i <> 0 then xleeren := i*3+1 else xleeren := 1;
        for yleeren := 1 to [color=#f50000]20[/color] do
        koordinaten[xleeren,yleeren] := 0;
        end;
...:cat:...

Nicolai1234 10. Mai 2004 15:47

Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
 
Jetzt klappt es zwar, aber ich weiß nicht warum der Fehler an x[1] was geändert hat!!!

sakura 10. Mai 2004 15:51

Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
 
Zitat:

Zitat von Nicolai1605
Jetzt klappt es zwar, aber ich weiß nicht warum der Fehler an x[1] was geändert hat!!!

Die Arrays Koordinaten und x werden direkt hintereinander im Speicher gehalten. Da Du mit Index 20 über den Bereich von Koordinaten herausgegelangt bist, hast Du die Daten in x überschrieben ;)

...:cat:...

nieurig 10. Mai 2004 17:54

Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
 
Hi Nicolai !
Der Fehler wäre durch ein Range-Check vermeidbar.
Ich stelle während der Programmentwicklung das Rangechecking an, um nicht auf solche Probleme reinzufallen.

Niels

-->
Projekt-Optionen-Compiler-Bereichsüberprüfung


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