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) -> fehlermeldung

    http://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 🙂


  • Mod

    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 vertauscht

    vielen 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 ^^


Anmelden zum Antworten