![]() |
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; |
Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
Wie ist denn das Array Koordinaten deklariert?
...:cat:... |
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 |
Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
Delphi-Quellcode:
Dass ich bei 0 anfange ist gewolt, da dann die Rechnung 0*3+1 entsteht und so auf jeden Fall mehr als 0 rauskommt!
Koordinaten: Array [1..19,1..19] of byte;
x,y: Array [1..10] of integer; |
Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
Zwei Fehler habe ich gefunden, aber erst danach; 20 ist >19 ;)
Code:
...:cat:...
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; |
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!!!
|
Re: Variable ändert sich, ohne dass sie angesprochen wurde!?
Zitat:
...:cat:... |
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:18 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