new/delete dynamische arrays
-
Hallo!
Ich schreibe gerade das Programm Reversi. Für die KI möchte ich temporäre dyn. Arrays erstellen.Problem:
-bei der initialisierung des 2. dyn arrays kann ich die nuller-elemente nicht initialisieren (laufen die schleifen ab 0 los, stürzt das prog ab)
-beim löschen des 1.arrays nach dem löschen des 2.array ebenfalls absturzdie wichtigsten programmteile sind angehängt.
viele grüße und vielen dank für jede hilfe!
fabian#include <iostream> using namespace std; int main(){ // Variablen int nx = 8; int ny = 8; // Dynamisches Feld im Heap erzeugen // Realisierung mit Pointer-to-Pointer und new/delete // nachzulesen unter: // http://www.uni-bayreuth.de/departments/math/~rbaier/lectures/c++_intro/html/node167.html int **a2d; a2d = new (int *); for (int i = 0; i < ny; i++) a2d[i] = new int[nx]; // alle Felder mit 0 initiieren for (int i = 0; i < nx; i++){ for (int j = 0; j < ny; j++){ a2d[i][j]=0; } } cout << "Feld1 erzeugt und initialisiert" << endl;system("Pause"); int ** t_a2d; t_a2d = new (int *); for (int i = 0; i < ny; i++) t_a2d[i] = new int[nx]; cout << "Feld2 erzeugt" << endl;system("Pause"); // alle Felder mit 0 initiieren for (int i = 1; i < nx; i++){ //Warum hier erst ab 1 möglich???? for (int j = 1; j < ny; j++){ t_a2d[j][i]=0; } } cout << "Feld2 erzeugt und mit null initialisiert" << endl;system("Pause"); for (int i = 1; i < nx; i++){ for (int j = 1; j < ny; j++){ t_a2d[j][i]=a2d[j][i]; } } cout << "Feld2 erzeugt mit Feld1 initialisiert" << endl;system("Pause"); for (int i = 0; i < ny; i++) delete [] t_a2d[i]; delete [] t_a2d; cout << "Feld2 gelöscht" << endl; system("Pause"); // Dynamisches Feld1 aus dem Heap Löschen for (int j = 0; j < ny; j++) delete [] a2d[j]; delete [] a2d; cout << "Feld1 gelöscht" << endl; system("Pause"); system("Pause"); return 0; }
-
In Zeile 22 holst du Speicher für genau einen int-Zeiger. In der darauf folgenden Schleife tust du aber so, als ob du ny int-Zeiger hättest.
-
hmm, unter http://www.uni-bayreuth.de/departments/math/~rbaier/lectures/c++_intro/html/node167.html stand es so:
int main(void) { int zeilen, spalten; // matrix Zeiger auf double-Zeiger, // d.h. matrix kann bel. viele Zeilen enthalten, // die jeweils bel. viele Spalten enthalten koennen double ** matrix; cout << "Zeilen der Matrix: "; cin >> zeilen; cout << "Spalten der Matrix: "; cin >> spalten; // falsch, da matrix[i] vom Typ "double *" und nicht vom Typ // double [spalten]! // matrix = new double[zeilen][spalten]; matrix = new (double *)[zeilen]; for (int i = 0; i < zeilen; i++) { matrix[i] = new double[spalten]; for (int j = 0; j < spalten; j++) matrix[i][j] = i*spalten + j; } for (int i = 0; i < zeilen; i++) delete [] matrix[i]; delete [] matrix; return 0; }
da [zeilen] nach new (int*) von meinem compiler nicht akzeptiert wurde, hab ich es weggelassen und es hat solange funktioniert bis ich ein 2. array programmiert habe.
wie kann ich es zum laufen bringen?
Fabi
-
Hallo,
hast du wirklich [zeilen] geschrieben oder [ny].
zeilen kann ja nicht funktionieren, weil du keine Variable mit dem Namen zeilen deklariert hast.
Das Problem ist das unten benannte.MfG
DDR-RAM
-
compiler antwort auf das matrix programm:
In function `int main()': 22: error: array bound forbidden after parenthesized type-id 22: note: try removing the parentheses around the type-id
-
mit den variablennamen gibt es keine problem, das problem ist, das dort überhaupt klammern hinter (int*) stehen
die o.g. compiler-zeilenangaben stimmen nicht, hier korrigiert:
In function `int main()': 18: error: array bound forbidden after parenthesized type-id 18: note: try removing the parentheses around the type-id
-
Dann ersetze deine Zeile 22 durch:
a2d = new int*[ny];
und deine Zeile 39 durch
t_a2d = new int*[ny];
Hoffe das hilft.
MfG
DDR-RAM
-
wow, läuft!
VIELEN DANK für die schnelle Hilfe!
Fabian