Zweidimensionaler Array wird falsch belegt.
Hallo Listenbewohner! Im Moment habe ich ein Problem mit einem zweidimensionalen Array in C. Das Array wird mit int array [100][100]; definiert. Wenn ich das ganze jetzt mit einer Doppelschleife initialisiere und danach das Element array [1][0] = 1 zu setzten versuche ergibt sich folgendes Speicherabbild: array [0][99] = 0 array [0][100] = 1 array [1][0] = 1 Ich finde es nun ziemlich merkwürdig, dass [0][100] = 1 ist, obwohl ich ja nur [1][100] = 1 setzen wollte und alle anderen Elemente zuvor auf 0 gesetzt wurden. Das Setzen von [1][0] erfolgt per scanf ("%i", x); scanf ("%i", y); array [x][y] = 1; Es kann natürlich auch sein, dass ich hier etwas falsch verstanden habe und dazu noch was lernen muss. Vielen Dank! Tobias -- GPG-Fingerprint: C39E 5381 7721 8613 B5C9 CFAF 54FC B8DB D02D 7085 Registered Linux-User #367044 Registered Linux-Machine #262062 http://counter.li.org Diese E-Mail wurde mit einer fortgeschrittenen elektronischen Signatur nach §2 2. d) SigG signiert.
Am Montag, den 11.07.2005, 16:08 +0200 schrieb Tobias Hirning:
Hallo Listenbewohner! Im Moment habe ich ein Problem mit einem zweidimensionalen Array in C.
Das Array wird mit int array [100][100]; definiert.
Wenn ich das ganze jetzt mit einer Doppelschleife initialisiere und danach das Element array [1][0] = 1 zu setzten versuche ergibt sich folgendes Speicherabbild:
array [0][99] = 0 array [0][100] = 1 array [1][0] = 1
Ich finde es nun ziemlich merkwürdig, dass [0][100] = 1 ist, obwohl ich ja nur [1][100] = 1 setzen wollte und alle anderen Elemente zuvor auf 0 gesetzt wurden. Das Setzen von [1][0] erfolgt per
scanf ("%i", x); scanf ("%i", y); array [x][y] = 1;
Es kann natürlich auch sein, dass ich hier etwas falsch verstanden habe und dazu noch was lernen muss. Vielen Dank! Tobias
Hi Tobias, sieht nach einem typischen Problem aus. Ein zweidimensionales Array ist im Speicher folgendermaßen angeordnet: als erste aus dem a[0] dann die a[1]... Das als kleine Erläuterung des folgenden Effekts. Wenn Du schreibst: int array[100] hast Du die Elemente a[0] bis a[99] nicht a[0] bis a[100]. Da Arrayvariablen aber nur Zeiger sind gilt: a[0][100] = a[1][0], weil das 100. Element relativ zu a[0][0] gesehen eben a[1][0] ist. Ich hoffe, ich habe mich verständlich ausgedrückt. philipp
Hi Philipp! Am Montag, 11. Juli 2005 16:28 schrieb Philipp Otte:
[...]
Hi Tobias, sieht nach einem typischen Problem aus. Ein zweidimensionales Array ist im Speicher folgendermaßen angeordnet: als erste aus dem a[0] dann die a[1]... Das als kleine Erläuterung des folgenden Effekts. Wenn Du schreibst: int array[100] hast Du die Elemente a[0] bis a[99] nicht a[0] bis a[100]. Da Arrayvariablen aber nur Zeiger sind gilt: a[0][100] = a[1][0], weil das 100. Element relativ zu a[0][0] gesehen eben a[1][0] ist. Ich hoffe, ich habe mich verständlich ausgedrückt. Doch hast du. Ich hatte mir schon gedacht, dass ich da irgendwo einen Denkfehler gemacht habe. Das tut echt weh, dass ich daran nicht gedacht hab!!! Werde ich gleich mal ausprobieren, wird wahrscheinlich funktionieren! Vielen Dank, dass du mir auf die Sprünge geholfen hast! Tobias
-- GPG-Fingerprint: C39E 5381 7721 8613 B5C9 CFAF 54FC B8DB D02D 7085 Registered Linux-User #367044 Registered Linux-Machine #262062 http://counter.li.org Diese E-Mail wurde mit einer fortgeschrittenen elektronischen Signatur nach §2 2. d) SigG signiert.
Hallo, Am Mon, 11 Jul 2005, Tobias Hirning schrieb:
Im Moment habe ich ein Problem mit einem zweidimensionalen Array in C.
Das Array wird mit int array [100][100]; definiert.
Wenn ich das ganze jetzt mit einer Doppelschleife initialisiere und danach das Element array [1][0] = 1 zu setzten versuche ergibt sich folgendes Speicherabbild:
array [0][99] = 0 array [0][100] = 1 array [1][0] = 1
Wo ist das Problem? printf("%p == %p?\n", &array[0][100], &array[1][0]); Ein array a[100] geht eben nur von a[0] bis a[99]. Und a[100] ist dann eben das, was an der naechsten Speicherstelle steht... Bei dir eben zufaellig array[1][0]. -dnh -- Ich darf das! Ich darf das! Denn Ich bin ja Merkbefreit! Trullalaa Ich darf das! [WoKo in dag°]
participants (3)
-
David Haller
-
Philipp Otte
-
Tobias Hirning