delete fehler bei 2d-dynamisch array.
-
Hallo
Ich habe ein Programm geschrieben, welches 2d array dynamisch erstellt mit zufallzahlen
ich habe das Problem, dass das Programm mir diese Fehler auslöst.
Ich finde keine plausible Lösung. Kann jm mir helfen?PS: Reihe = 4 und Spalte = 3 gibt kein Problem
Reihe = 3, Spalte = (höher als 3) -> fehlermeldunghttp://www.bilder-upload.eu/show.php?file=fbfe69-1475772340.jpg
code:
/*Erstelle ein 2d-Array und füge Zufallzahl ein.*/ #include <iostream> #include<ctime> using namespace std; int main() { srand(time_t(NULL)); int zeile, spalte,zahl; cout << "Geben Sie Zeile an: "; cin >> zeile; cout << "Geben Sie Spalte an: "; cin >> spalte; //zufallzahlbereich abfragen cout << "Geben Sie Zufallzahlenbereich an: "; cin >> zahl; //2d array dynamisch anlegen int ** d2array = new int *[zeile]; //an jeden Zeiger(Zeile) ein Array anhängen for ( int y = 0; y < zeile; y++) { d2array[y] = new int[spalte]; } //nun mit d2array arbeiten for ( int y = 0; y < zeile; y++) { for (int x = 0; x < spalte; x++) { d2array[y][x] = rand() % zahl + 1; cout << d2array[y][x] << " "; } cout << endl; } //Speicher freigeben for (int j = 0; j < spalte; ++j) { delete [] d2array[j]; } delete [] d2array; system("pause"); return 0; }ich bitte um Hilfe.
PS: ich will kein Vector benutzen

-
yeurandom92 schrieb:
PS: ich will kein Vector benutzen

Also ein 100% selbstgemachtes Problem.
-
Vergleich mal Zeile 22 mit Zeile 41.
-
alles klar
habe spalte und zeile vertauschtvielen dank

-
und du bist sicher, dass du keinen std::vector verwenden möchtest?
-
Techel schrieb:
und du bist sicher, dass du keinen std::vector verwenden möchtest?
vector ist für mich noch bisschen fremd.
macht man das nicht mit vector.resize ?würde gern andere methode dazu lernen, kannst mir das zeigen? ich kann ja dadurch new und delete sparen ^^
-
Ein vector ist nicht nur einfacher zu bedienen, sondern ist auch sicherer. Was passiert denn (nicht), wenn auf einmal irgendwo eine Exception geworfen wird? Genau, delete wird uU. nicht aufgerufen. Exceptionsicherheit zusammen mit RAII, dh. das exzessive Benutzen von Kon-/und Destruktor ist generell ein großes Thema, ich weiß aber nicht, wie weit du bereits mit Objekten in C++ vertraut bist. Kommt auf jeden Fall noch

Ein std::vector, das std:: davor, weil die Klasse im Namensraum std liegt, ist simple said nur ein Array, dessen größe du während der Laufzeit ändern kannst. Die Methode push_back fügt neue Elemente hinten dran, mit [] kannst du auf die Elemente wie bei einem Array ansprechen etc. etc.
Guck mal in eine Referenz/Google für weitere Funktionalitäten.Reines new und delete sollte in deinem Code sogut wie nie vorkommen, siehe das Abschnitt mit RAII oben.
Guck aber erstmal in deinem Buch weiter, das kommt sicher noch in den nächsten Kapiteln

-
Techel schrieb:
Ein vector ist nicht nur einfacher zu bedienen, sondern ist auch sicherer. Was passiert denn (nicht), wenn auf einmal irgendwo eine Exception geworfen wird? Genau, delete wird uU. nicht aufgerufen. Exceptionsicherheit zusammen mit RAII, dh. das exzessive Benutzen von Kon-/und Destruktor ist generell ein großes Thema, ich weiß aber nicht, wie weit du bereits mit Objekten in C++ vertraut bist. Kommt auf jeden Fall noch

Ein std::vector, das std:: davor, weil die Klasse im Namensraum std liegt, ist simple said nur ein Array, dessen größe du während der Laufzeit ändern kannst. Die Methode push_back fügt neue Elemente hinten dran, mit [] kannst du auf die Elemente wie bei einem Array ansprechen etc. etc.
Guck mal in eine Referenz/Google für weitere Funktionalitäten.Reines new und delete sollte in deinem Code sogut wie nie vorkommen, siehe das Abschnitt mit RAII oben.
Guck aber erstmal in deinem Buch weiter, das kommt sicher noch in den nächsten Kapiteln

bin dabei STL zu lernen ^^