ZD dynamischen Array über Funktion erstellen



  • [gelöst]

    Hallo,

    ich möchte eine Matrix mit Hilfe einer Funktion erstellen, weiß aber nicht mehr weiter. Keine Ahnung wie wo ich dabei genau Zeiger setzen soll. Mein Code:

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    void newmatrix(int **matrix, int zeile, int spalte); // Problem
    
    int main(void){
    	int zeile, spalte;
    	int **matrix;
    
    	cout << "Wie viele Zeilen: ";
    	cin >> zeile;
    	cout << "Wie viele Spalten: ";
    	cin >> spalte;
    
    	newmatrix(matrix, zeile, spalte);    //Problem
    
    	// Initialisieren
    	for(int i = 0; i < zeile; i++){
    		for(int j = 0; j < spalte; j++){
    			cout << "Eingabe des Elementes[" << i+1 << "][" << j+1 << "] : ";
    			cin >> matrix[i][j];
    		}
    	} cout << endl;
    
    	// Ausgeben
    	cout << "Matrix:" << endl;
    	for(int i = 0; i < zeile; i++){
    		for(int j = 0; j < spalte; j++){
    			cout << matrix[i][j] << " " ;
    		}
    		cout << endl;
    	}
    	for(int i = 0; i < zeile; i++){
    		delete [] matrix[i];
    	}
    	delete [] matrix;
    
    	return EXIT_SUCCESS;
    }
    
    // Problem:
    void newmatrix(int **matrix, int zeile, int spalte){
    	// Speicher für die einzelnen Zeilen reservieren
    	matrix = new int* [zeile];
    	// Speicher für die einzelnen Spalten reservieren
    	for(int i = 0; i < zeile; i++){
    		matrix[i] = new int [spalte];
    	}
    }
    

    Viele Grüße



  • Ich habe mein Problem gelöst:

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int **newmatrix(int zeile, int spalte);
    
    int main(void){
    	int zeile, spalte;
    	int **matrix;
    
    	cout << "Wie viele Zeilen: ";
    	cin >> zeile;
    	cout << "Wie viele Spalten: ";
    	cin >> spalte;
    
    	matrix = newmatrix(zeile, spalte);
    
    	// Initialisieren
    	for(int i = 0; i < zeile; i++){
    		for(int j = 0; j < spalte; j++){
    			cout << "Eingabe des Elementes[" << i+1 << "][" << j+1 << "] : ";
    			cin >> matrix[i][j];
    		}
    	} cout << endl;
    
    	// Ausgeben
    	cout << "Matrix:" << endl;
    	for(int i = 0; i < zeile; i++){
    		for(int j = 0; j < spalte; j++){
    			cout << matrix[i][j] << " " ;
    		}
    		cout << endl;
    	}
    
    	for(int i = 0; i < zeile; i++){
    		delete [] matrix[i];
    	}
    	delete [] matrix;
    
    	return EXIT_SUCCESS;
    }
    
    int **newmatrix(int zeile, int spalte){
    	// Speicher für die einzelnen Zeilen reservieren
    	int **matrix;
    	matrix = new int* [zeile];
    	// Speicher für die einzelnen Spalten reservieren
    	for(int i = 0; i < zeile; i++){
    		matrix[i] = new int [spalte];
    	}
    	return matrix;
    }
    


  • Endergebnis:

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int **newmatrix(int zeilen, int spalten);
    void matrixwerte(int **matrix, int zeilen, int spalten);
    void matrixausgeben(int **matrix, int zeilen, int spalten);
    void matrixdelete(int **matrix, int zeilen);
    Ihre Nachricht wurde erfolgreich eingetragen.
    
    Hier klicken, um Ihre Nachricht anzuzeigen
    
    Hier klicken, um zum Forum zurückzukehren
    
    int main(void){
    	int zeilen, spalten;
    	int **matrix;
    
    	cout << "Wie viele Zeilen : ";
    	cin >> zeilen;
    	cout << "Wie viele Spalten: ";
    	cin >> spalten;
    
    	matrix = newmatrix(zeilen, spalten);			// Speicher reservieren
    	matrixwerte(matrix, zeilen, spalten);			// Initialisieren
    	matrixausgeben(matrix, zeilen, spalten);		// Ausgeben
    	matrixdelete(matrix, zeilen);						// Speicher freigeben
    
    	return EXIT_SUCCESS;
    }
    
    int **newmatrix(int zeilen, int spalten){
    	// Speicher für die einzelnen zeilenn reservieren
    	int **matrix;
    	matrix = new int* [zeilen];
    	// Speicher für die einzelnen spaltenn reservieren
    	for(int i = 0; i < zeilen; i++){
    		matrix[i] = new int [spalten];
    	}
    	return matrix;
    }
    
    void matrixwerte(int **matrix, int zeilen, int spalten){
    	for(int i = 0; i < zeilen; i++){
    		for(int j = 0; j < spalten; j++){
    			cout << "Eingabe des Elementes[" << i+1 << "][" << j+1 << "] : ";
    			cin >> matrix[i][j];
    		}
    	} cout << endl;
    }
    
    void matrixausgeben(int **matrix, int zeilen, int spalten){
    	cout << "Matrix:" << endl;
    	for(int i = 0; i < zeilen; i++){
    		for(int j = 0; j < spalten; j++){
    			cout << matrix[i][j] << " " ;
    		}
    		cout << endl;
    	}
    }
    
    void matrixdelete(int **matrix, int zeilen){
    	// spaltenn der i-ten zeilen freigeben
    	for(int i = 0; i < zeilen; i++){
    		delete [] matrix[i];
    	}
    	// Jetzt die leeren zeilenn freigeben
    	delete [] matrix;
    }
    

    Edit: Ich glaube ich habe ein paar Fehler dabei gemacht. Läuft nicht so wie es soll. Wenn ich z.B. ein Element z.B. matrix[0][3] ausgeben möchte kommt ein anderer Wert raus. Speicherproblem. Ich hoffe ihr könnt mir weiterhelfen

    Es läuft alles mein Fehler hatte was falsches getippt.


Log in to reply