Problem mit mehrdimensionaler Array-Größe
-
Wenn du einen Mehrdimensionalen Array haben willst musst du folgendes machen:
int **xy; *xy = new int[10]; for(int i = 0; i < 10; i++) { xy[i] = new int[10]; } //irgendwas machen for(int i = 0; i < 10; i++) { delete[] xy; } delete[] *xy;
-
eher so
for(int i = 0; i < 10; i++) { delete[] xy[i]; }
-
Okay..., danke, für eure schnelle Antwort. Ich werde es gleich mal ausprobieren. Werde mich dann nochmal melden, ob es geklappt hat, aber wenn ihr es sagt, dann wird das schon stimmen.

EDIT:
Also ich habe es nun so gemacht, wie ihr es oben beschrieben habt. Das Programm lässt sich nun kompilieren, aber nachdem ich die Werte für das Array eingetragen habe, z.B. 7 Felder für die Breite und 5 für die Höhe, dann kommen erstmal zwei Fehlermeldungen, dass die Anweisung 0x00401210 auf den Speicher 0x00000000 verweist und direkt danach kommt noch ein Fenster, und zwar das die Ausnahme "unknown software exception" (...) in der Anwendung an der Stelle ... aufgetreten ist.
Ich vermute, dass ich das Array falsch durchlaufe und an irgendwelchen Feldern eine 0 reinschreiben möchte. Könnt ihr mir sagen, ob meine Vermutung richtig ist und wie ich das Array dann am besten durchlaufe? Danke schonmal...
MfG Apo
-
Mach mal aus
// Spielfeld durchlaufen for(i = 0; i < hoehe; i++) { for(j = 0; j < breite; j++) pSpielfeld[j][i] = 0; // Hier kommt noch einer cout << endl; }das hier:
// Spielfeld durchlaufen for(j = 0; j < breite; j++) { for(i = 0; i < hoehe; i++) pSpielfeld[j][i] = 0; // Hier kommt noch einer cout << endl; }Könnte daran liegen, zumindest ist die Art, so ein 2-dimensionales Array zu durchlaufen, ungewöhnlich wie du es hast. Habe aber leider gerade nichts zum Testen zu Hand. Falls es immer noch nicht geht, poste mal nochmal deinen ganzen verbesserten Code, dann wird der Fehler evtl schon bei deiner Speicherplatzallokierung (new) liegen.
-
Guten Morgen Leute,
also ich es nun mal so gemacht, wie du es mir gesagt hast, aber es funktioniert leider immer noch nicht. Hier ist nochmal mein Quellcode:
// Header-Dateien #include <iostream> using namespace std; int main() { // deklarieren der Variablen int breite = 0; int hoehe = 0; int** pSpielfeld = NULL; int i, j; // Eingabe cout << "Breite: "; cin >> breite; cout << "Hoehe: "; cin >> hoehe; // Eingabeauswertung if(breite < 0 || breite > 9 && hoehe < 0 || hoehe > 9) { cout << "Du hast eine ungueltige Eingabe getaetigt." << endl; cin.get(); cin.get(); return 1; } else { // Speicher reservieren *pSpielfeld = new int[breite]; for(i = 0; i < hoehe; i++) pSpielfeld[i] = new int[10]; // testen ob Speicher reserviert werden konnte if(pSpielfeld) { // Spielfeld durchlaufen for(j = 0; j < breite; j++) { for(i = 0; i < hoehe; i++) pSpielfeld[j][i] = 0; cout << endl; } // Spielfeld ausgeben for(j = 0; j < breite; j++) { for(i = 0; i < hoehe; i++) cout << pSpielfeld[j][i] << " "; cout << endl; } // Speicher wieder freigeben for(i = 0; i < hoehe; i++) delete[] pSpielfeld[i]; delete[] *pSpielfeld; } } cin.get(); cin.get(); return 0; }Ich hoffe das ihr versteht, was ich mit dem Programm bezwecken möchte. Danke schonmal...
MfG Apo
-
mach doch mal aus dem
*pSpielfeld = new int[breite];ein
pSpielfeld = new int*[breite];
-
Und lass beim letzten delete-Befehl das * weg.
-
und schau dir mal in der Win32 FAQ an, wie man die Konsole "besser" geöffnet lässt (@cin.get(),cin.get())

-
Hi,
hat zwar nix mit deinem Problem direkt zutun, aber den Else-Zweig nach dem return 1 kannste dir schenken. Entweder bricht dein Programm die Main Funktion ab, oder der Code nach dem Anweisungsblock der If-Abfrage wird ausgeführt.
Gruß Chris
-
Apocalypse schrieb:
// Speicher reservieren *pSpielfeld = new int[breite]; for(i = 0; i < hoehe; i++) pSpielfeld[i] = new int[10];Entweder du initialisierst mit new *int[hoehe], oder du läufst die Schleife nur bis breite durch. Sonst krachts bei der Ausführung, wenn hoehe > breite.
-
Hey..., danke es funktioniert nun. Es lag wirklich an den beiden Fehlern!
MfG Apo *freu*