2 Dim Array Call by Reference Problem
-
Hi Leute
Ich versuche mich gerade an einer Sudoko Software (einfaches Konsolen Programm) um so ein bisschen in den C++ Syntax reinzukommen.
Ich habe dabei ein 2 Dim Array definiert mit meinen Felder: int sudoko[9][9];
So, nun habe ich eine Funktion generiert names:
void sudoko_generieren(int sudoko[][9]);
So die Funktion schaut so aus (Sinn der Funktion erstmal nicht so wichtig, geht ja um den Fehler):
void sudoko_generieren(int sudoko[][9]) { int anzahl_anfangszahlen = 10; int i,j; for(j=0; j<2; j++) { for(i=0; i<9; i++) { int zufalls_x = zufallszahl(); int zufalls_y = zufallszahl(); sudoko[zufalls_x][zufalls_y] = i; if (sudoko_zahlpruefen(sudoko, zufalls_x, zufalls_y, sudoko[zufalls_x][zufalls_y]) == false) { sudoko[zufalls_x][zufalls_y] = 0; } } } }Das PRoblem muss an der Schleife: for(j=0; j<2; j++) liegen. Wenn ich j<1 setze kommt der Fehelr nicht auf. Zwar kompliert mein gnu c++ Compiler alles korrekt, aber wenn ich das Programm starte zeigt er manchmal den Fehler: Bus-Zugriffsfehler oder manchmal Speicher-Zugriffsfehler und manchmal eben kein fehler.
Woran kann das liegen? Hat C++ irgendwie ein Problem wenn ich in meinem Array öfters mal Werte an, bzw. überschreibe? Mir fällt absolut nichts ein und mein C++ buch habe ich leider verliehen.
Vielen Dank für jede Hifle!
Gruß Tobi
-
Übergeb mal das Array als Zeiger
void sudoko_generieren(int(*)[9] sudoko) { ... }
-
Also das Funktioniert mal garnicht. Ich erhalte viele Fehelrmeldungen:
includes/sudoko_funktionen.h:4: error: variable or field ‘sudoko_generieren’ declared void
includes/sudoko_funktionen.h:4: error: expected primary-expression before ‘int’
includes/sudoko_funktionen.h:5: error: variable or field ‘sudoko_initialisieren’ declared void
includes/sudoko_funktionen.h:5: error: expected primary-expression before ‘int’
includes/sudoko_funktionen.h:51: error: variable or field ‘sudoko_generieren’ declared void
includes/sudoko_funktionen.h:51: error: redefinition of ‘int sudoko_generieren’
includes/sudoko_funktionen.h:4: error: ‘int sudoko_generieren’ previously defined here
includes/sudoko_funktionen.h:51: error: expected primary-expression before ‘int’
includes/sudoko_funktionen.h:78: error: variable or field ‘sudoko_initialisieren’ declared void
includes/sudoko_funktionen.h:78: error: redefinition of ‘int sudoko_initialisieren’
includes/sudoko_funktionen.h:5: error: ‘int sudoko_initialisieren’ previously defined here
includes/sudoko_funktionen.h:78: error: expected primary-expression before ‘int’
test.cpp: In function ‘int main()’:
test.cpp:13: error: ‘sudoko_initialisieren’ cannot be used as a function
test.cpp:27: error: ‘sudoko_generieren’ cannot be used as a functionQuellcode schaut dann grad so aus:
void sudoko_generieren(int(*)[9] sudoko) { int anzahl_anfangszahlen = 10; int i,j; for(j=0; j<2; j++) { for(i=0; i<9; i++) { int zufalls_x = zufallszahl(); int zufalls_y = zufallszahl(); sudoko[zufalls_x][zufalls_y] = i; if (sudoko_zahlpruefen(sudoko, zufalls_x, zufalls_y, sudoko[zufalls_x][zufalls_y]) == false) { sudoko[zufalls_x][zufalls_y] = 0; } } } }Am Anfang meiner Headerdatei steht:
void sudoko_ausgabe(int sudoko[][9]); int sudoku_zahlauslesen(int sudoko[][9], int x, int y); void sudoko_generieren(int(*)[9] sudoko); void sudoko_initialisieren(int(*)[9] sudoko); bool sudoko_zahlpruefen(int sudoko[][9], int x, int y, int zahl);Da muss noch uirgendwas schief sein.
Gruß Tobi
-
probier mal das
void sudoko_generieren(int(*sudoko)[9]) { ...
-
ttobsen schrieb:
Bus-Zugriffsfehler
was iss'n das für 'ne maschine bzw. betriebssystem?
btw: die funktion 'zufallszahl()' darf nur werte im bereich 0...8 erzeugen.
das musst du sicherstellen.
-
Die letzte Schreibweise war die Richtige,
hab nen kleinen Test gemacht.void func(int(*sudoko)[9]) { sudoko[0][2] = 5; } int main() { int sudoko[9][9] = {0,}; func(sudoko); }
-
net schrieb:
ttobsen schrieb:
Bus-Zugriffsfehler
was iss'n das für 'ne maschine bzw. betriebssystem?
btw: die funktion 'zufallszahl()' darf nur werte im bereich 0...8 erzeugen.
das musst du sicherstellen.Hi
daran lag der Zugriffsfehler! Danke für den Tipp.
Ist Suse Linux 10.1.
freak11 schrieb:
Die letzte Schreibweise war die Richtige,
hab nen kleinen Test gemacht.void func(int(*sudoko)[9]) { sudoko[0][2] = 5; } int main() { int sudoko[9][9] = {0,}; func(sudoko); }Und mit dieser Schreibweise funktioniert die Übergabe! Vielen Dank an euch beide.
Gruß Tobi