Problem mit einer Tabelle

Hallo Zusammen!

Ich versuch euch mal mein Problem zu schildern, vielleicht könnt ihr mir ja weiter helfen.

Wir sollen in Informatik eine Aufgabe in C programmieren. Was die Aufgabe ist, ist ja mal Nebensache. Es geht um eine Tabelle: Der Benutzer soll zuvor dem Programm vorgeben wie groß die Tabelle (Spaltenzahl n, und Zeilenzahl m) sein soll. Danach ob er die Tabelle selber mit Zahlen füllen soll, oder ob sie automatisch (Stichwort Zufallszahlen) gefüllt werden soll. Danach soll die Tabelle ausgegeben werden.

Jetzt hab ich ein Problem bei 10x10 Tabellen. Und zwar sehen die so aus:

990 267 389 431 507 984 685 35 681 726
726 318 2 280 141 815 602 453 917 494
494 159 22 683 664 660 349 968 98 54
54 244 319 780 71 577 97 89 262 736
736 203 400 514 769 266 30 669 285 621
621 949 117 405 846 175 906 142 993 90
90 206 762 836 395 754 648 609 720 546
546 232 576 494 600 953 349 598 329 786
786 962 840 118 549 54 966 273 445 349
349 295 561 32 88 326 540 831 592 714

Ich weiß ich weiß sieht nicht ganz so gut aus, aber ich denke man kanns erkennen. Mich stört hier die erste und die letzte Spalte. Zum Beispiel die 726 in der ersten Spalte, die steht auch in der 10. Spalte nur eine Zeile darüber. Auch alle anderen Zahlen der ersten Spalte stehen in der 10. Zeile.

Dieses Problem tritt nur bei 10x10 Tabellen auf. Sowohl bei manueller Eingabe als auch bei automatischer Eingabe der Zahlen. Im Debugmodus hab ich mir das ganze auch schon angeschaut. Also eingelesen in die Variable (int schachbrett [9][9]) wird es richtig.

Könnt ihr mir sagen wie es dazu kommt???

Hier mal der entscheidende Ausschnitt im Quellcode dazu:

// Automatische Eingabe der Werte (Zufallszahlen)

if (auto_manuell==‚a‘ || auto_manuell==‚A‘)
{
srand( (unsigned)time( NULL ) );

for (hilf_zeile=0;hilf_zeile

[…]

Jetzt hab ich ein Problem bei 10x10 Tabellen. Und zwar sehen
die so aus:

990 267 389 431 507 984 685 35 681 726
726 318 2 280 141 815 602 453 917
494
494 159 22 683 664 660 349 968 98
54
54 244 319 780 71 577 97 89 262
736
736 203 400 514 769 266 30 669 285 621
621 949 117 405 846 175 906 142 993 90
90 206 762 836 395 754 648 609 720 546
546 232 576 494 600 953 349 598 329 786
786 962 840 118 549 54 966 273 445 349
349 295 561 32 88 326 540 831 592 714

Ich weiß ich weiß sieht nicht ganz so gut aus, aber ich denke
man kanns erkennen. Mich stört hier die erste und die letzte
Spalte. Zum Beispiel die 726 in der ersten Spalte, die steht
auch in der 10. Spalte nur eine Zeile darüber. Auch alle
anderen Zahlen der ersten Spalte stehen in der 10. Zeile.

Dieses Problem tritt nur bei 10x10 Tabellen auf. Sowohl bei
manueller Eingabe als auch bei automatischer Eingabe der
Zahlen. Im Debugmodus hab ich mir das ganze auch schon
angeschaut. Also eingelesen in die Variable (int schachbrett
[9][9]) wird es richtig.

Da ist schon die Ursache: ein int schachbrett[9][9] ist nur für
9 mal 9 Elemente dimensioniert. Wenn du versucht das 10-te Element via schachbrett[0][9] zu lesen, erhälst du automatisch schachbrett[1][0]. Damit lässt sich dein Phänomen fix erklären.

Wenn du wirklich ein 9x9=81 Elemente großes Feld allokiert hast, aber 10x10=100 Elemente beschreibst, so greift auf fremden Speicher zu.

Wortfuchs

Da ist schon die Ursache: ein int schachbrett[9][9] ist nur
für
9 mal 9 Elemente dimensioniert. Wenn du versucht das 10-te
Element via schachbrett[0][9] zu lesen, erhälst du automatisch
schachbrett[1][0]. Damit lässt sich dein Phänomen fix
erklären.

Wenn du wirklich ein 9x9=81 Elemente großes Feld allokiert
hast, aber 10x10=100 Elemente beschreibst, so greift auf
fremden Speicher zu.

Wortfuchs

Na gut. Du hast recht- es funktioniert. Jetzt versteh ich nur nicht warum. Es wird doch bei Null angefangen zu zählen. Das heißt von 0 bis neun habe ich doch 10 Felder…

Trotzdem vielen dank!

Hallo,

Du hast recht das mit 0 angefangen wird. Aber bei den Indexen.
Also
a[0] = 1. Element

a[9] = 10. Element

Aber bei der Menge ist es wie im „richtigen Leben“.
Denn 0 ist ja nichts, oder :smile:

Also
int[9] = 9 Elemente
int[10] = 10 Elemente

Gruss, Simon