Wie die Rückkehr der matrix (2D-array) in der Funktion? (C)
Erstellte ich eine Funktion, die erzeugt ein bingo board und ich wollen die Rückkehr der bingo-board.
da ich nicht erwartet habe , es funktioniert nicht.
hier ist die Funktion:
int** generateBoard() {
int board[N][M], i, j , fillNum;
Boolean exists = True;
//initilize seed
srand(time(NULL));
//fill up..
for(i = 0; i < N; ++i) {
for(j = 0; j < M; ++j) {
exists = True;
while(exists) {
fillNum = rand()%MAX_RANGE + 1; //limit up to MAX_RANGE
if(beenAdded(board, fillNum) == Exist) {
continue;
} else {
board[i][j] = fillNum;
exists = False;
}
}
}
}
return board;
}
Ich habe eine compilcation Fehler (die rote subline) bei "return-board" - Linie.
ist es Weg, um wieder ein 2D-array ohne mit structs \ dynamische Zuordnungen?
Ich bin mit Microsoft Visual C++ Express 2010.
InformationsquelleAutor der Frage Billie | 2012-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jemand besitzen muss, um die Erinnerung an dieses board irgendwound noch wichtiger ist, dass das Eigentum erweitern müssen zurück an den Aufrufer dieser Funktion. Ohne die dynamische Zuweisung, nur andere echte alternative ist, es zu senden, in der Funktion als in - /out-parameter.
aufrufen und wie diese von Ihrem Anrufer:
Ich würde auch überlegen, relocatting die
srand()
Aufruf der startup-code inmain()
. Es sollte im Idealfall nie in die einige potenziell wiederholen-callable-Funktion, und es sollte sichergestellt sein, nur ausgeführt werden, einmal pro Prozessausführung. (Hinweis: ich kann ehrlich nicht erinnern, wenn es einmal pro thread Ausführung, aber an diesem Punkt in der Codierung Lernkurve ich vermute, multi-threading ist nicht auf dem radar noch).Schließlich wird Ihre random-fill-Schleife ist unnötig wiederholten. Es gibt bessere alternativen zu generieren, was man offenbar versucht, zu tun: erstellen Sie eine zufällige permutation von einem vorhandenen Satz von zahlen. Wie geschrieben, Sie könnte spin für einige Zeit versuchen, zu füllen, die letzten paar slots, je nachdem, wie viel größer
MAX_RANGE
ist im Vergleich zu(N*M)
.InformationsquelleAutor der Antwort WhozCraig
Ihnen angegebenen
board
als lokale variable - seine Erinnerung ist dealoccated die Funktion den Gültigkeitsbereich verlässt.Können Sie erklären, den Vorstand global, oder Sie können es dynamisch wie so:
Müssen Sie dynamisch das gratis-board:
InformationsquelleAutor der Antwort Israel Unterman