Variable ändert sich selbstständig (?)
-
Hallo,
ich hab ein kleines Problem mit folgendem Code:
int area_width = 9, area_height = 9; int area[9][9]; int x, y; for(x=0;x<=area_width;x++) { for(y=0;y<=area_height;y++) { area[x][y] = 0; } }Wenn ich diesen Code ausführe, hat area_height am Ende der Schleife den Wert 0.
Was ich bisher versucht habe:
1. area_height als Konstante deklarieren, also const int area_height = 9; Ergebnis war ein Laufzeitfehler.
2. area_height probeweise überall durch die Zahl 9 ersetzen. Seltsamerweise nahm dann area_width den Wert 0 an. area_width war vorher aber immer 9 geblieben.
3. Sowohl area_width als auch area_height durch 9 ersetzen. Ergebnis wie bei 1.Wäre prima, wenn mir jemand helfen könnte.
Vielen Dank im VorrausGruß
dread
-
Hehe, witziger Fehler

Wenn du ein Array hast, das du mit
int a[9]deklarierst, darfst du nur auf die Elemente a[0] bis [8] zugreifen. Da du auch auf das neunte zugreifst (wegen dem '<=' in der Schleifenbedingung), überschreibst du die anderen Variablen damit
-
mach statt <= bitte < sonst hast beim letzten durchlauf, ein zugriff aufs nirvana, der rest klingt ein bisschen misteriös
mfg spjoe
-
Jap es liegt daran das der Index eines Arrays bei 0 und nicht bei 1 Anfängt. Dadurch hast du außerhalb des reservierten Bereiches geschrieben ...
const std::size_t area_width = 9, area_height = 9; int area[area_width][area_height]; for (std::size_t x = 0; x < area_width; ++x) for (std::size_t y = 0; y < area_height; ++y) area[x][y] = 0;...
-
Japp, das war der Fehler.

Werds mir merken.
(Das kommt davon, wenn man von Visual Basic kommt)
-
dread schrieb:
...Das kommt davon, wenn man von Visual Basic kommt...
Aber ich glaube nicht, dass in VB ein Array mit 9 Elemente 10 Elemente hat ....

dread schrieb:
...
int area_width = 9, ... int area[9][9]; ... for(x=0;x<=area_width;...Gruß,
Simon2.
-
Simon2 schrieb:
dread schrieb:
...Das kommt davon, wenn man von Visual Basic kommt...
Aber ich glaube nicht, dass in VB ein Array mit 9 Elemente 10 Elemente hat ....

Aber es ist schon irritierend: In VB gibt man bei der Initialisierung eines Arrays eben nicht die Größe eines Arrays sondern dessen höchsten Index (oder den niedrigsten und höchsten) an. Das heißt, folgende Initialisierung:
Dim arr(10) As Integer… erstellt (per Default) in Wahrheit ein Array mit 11 Elementen.
/EDIT: Und dadurch verwendet man in einer VB-Schleife eben doch eine *inklusive* obere Schranke, in C(++) hingegen eine exklusive.
-
Konrad Rudolph schrieb:
...folgende Initialisierung:
Dim arr(10) As Integer… erstellt (per Default) in Wahrheit ein Array mit 11 Elementen.
...Aha ! Dann hatte ich doch Unrecht mit:
Simon2 schrieb:
...
Aber ich glaube nicht, dass in VB ein Array mit 9 Elemente 10 Elemente hat ....
denn ich konnte mir eigentlich nur die 2 Varianten vorstellen:
- Entweder gibt man die Anzahl der Array-Alemente an (und die Schleife [0, 9] durchläuft halt 10 Elemente)
- oder den höchsten Index und zählt ab 1.Auf die Idee "Höchster Index UND ab 0 zählen" bin ich gar nicht gekommen.
OK - wieder was gelernt.

Gruß,
Simon2.