Zweidimmensionales Array?



  • #include <stdio.h>
    
    int main(void)
    {
    	// Doppelter Zeiger
    	int **Matrix = NULL;
    	int i, a, b;
    
    	// Erste Dimension reservieren (Zeilen):
    	Matrix = malloc(sizeof(int*) * 5);
    
    	// Zweite Diemension reserveiren (Spalten):
    	for(i = 0; i < 9; i++)
    	{
    		Matrix[i] = malloc(sizeof(int) * 9);
    	}
    
    	// Matrix initialisierien mit Zeilennummer gefolgt von Spaltennummer
    	i = 0;
    	for(a = 0; a < 5; a++)
    		for(b = 0; b < 9; b++)
    		{
    			Matrix[a][b] = i;
    			i++;
    		}
    
    	// Matrix ausgeben
    	for(a = 0; a < 5; a++)
    	{
    		for(b = 0; b < 9; b++)
    		{
    			printf("%d ", Matrix[a][b]);
    		}
    		printf("\n");
    	}
    
    	// Speicherplatz freigeben
    	for(i = 0; i < 9; i++)
    	{
    		free(Matrix[i]);
    	}
    
    	free(Matrix);
    }
    

    Finde meinen Fehler nicht - mein Debugger sagt mir auch nur das der Fehler unterhalb des Kommentars Speicherplatz freigeben zu finden ist - ich kann jedoch hier keinen Fehler entdecken... mmh?

    PS: Ich weiß, dass es schlampig programmiert ist



  • // Erste Dimension reservieren (Zeilen):
        Matrix = malloc(sizeof(int*) * 5);
    
        // Zweite Diemension reserveiren (Spalten):
        for(i = 0; i < 9; i++)
        {
            Matrix[i] = malloc(sizeof(int) * 9);
        }
    [...]
    

    Das fängt schon hier an, die Anzahl der Zeilen ist 5, die for Schleife läuft aber 10 mal durch.

    Edit: kleine Korrektur



  • Matrix = malloc(sizeof(int*) * 5); 
    
        // Zweite Diemension reserveiren (Spalten): 
        for(i = 0; i < 9; i++)
    

    da ist ein Fehler, denn einerseits reservierst du nur 5 Stellen aber deine for Schleife läuft 10 Mal. Schon bei Matrix[5] sollte es nicht mehr gehen.

    Überprüfe immer (nach malloc), dass kein NULL zurückgegeben wird.



  • ups... so müsste es jetzt passen - jedenfalls stürtzt das Programm nicht mehr ab und tut was es soll (dachte ich hätte irgendwo mit den Zeigern geschludert):

    #include <stdio.h>
    
    int main(void)
    {
    	// Doppelter Zeiger
    	int **Matrix = NULL;
    	int i, a, b;
    
    	// Erste Dimension reservieren (Zeilen):
    	Matrix = malloc(sizeof(int*) * 5);
    
    	// Zweite Diemension reserveiren (Spalten):
    	for(i = 0; i < 5; i++)
    	{
    		Matrix[i] = malloc(sizeof(int) * 9);
    	}
    
    	// Matrix initialisierien mit Zeilennummer gefolgt von Spaltennummer
    	i = 0;
    	for(a = 0; a < 5; a++)
    		for(b = 0; b < 9; b++)
    		{
    			Matrix[a][b] = i;
    			i++;
    		}
    
    	// Matrix ausgeben
    	for(a = 0; a < 5; a++)
    	{
    		for(b = 0; b < 9; b++)
    		{
    			printf("%d ", Matrix[a][b]);
    		}
    		printf("\n");
    	}
    
    	// Speicherplatz freigeben
    	for(i = 0; i < 5; i++)
    	{
    		free(Matrix[i]);
    	}
    
    	free(Matrix);
    }
    

    supertux schrieb:

    Überprüfe immer (nach malloc), dass kein NULL zurückgegeben wird.

    werd ich in zukunft machen



  • Warum machst du es dann nich?


Anmelden zum Antworten