Fehlermeldung bei dynamischem 2D-Array



  • Hallo,
    ich habe folgendes C-Programm, um ein 2D Array mit einstellbarer Größe auszugeben:

    #include <stdio.h> 
    #include <conio.h>
    #include <stdlib.h>
    
    typedef unsigned int uint;
    
    int BREITE;
    int HOEHE;
    int** Feld;
    
    main()
    {
    
        uint BREITE, HOEHE;
    	printf("Wie gross soll die Y-Dimension sein? ");
    	scanf_s("%d", &HOEHE);
    	printf("Wie gross soll die X-Dimension sein? ");
    	scanf_s("%d", &BREITE);
    
    	Feld = malloc(HOEHE * sizeof(int*));
    	for (int y = 0; y < HOEHE; y++)
    		Feld[y] = malloc(BREITE * sizeof(int));
    
    	int counter = 0;
    	for (uint y = 0; y < HOEHE; y++)
    	{
    		for (uint x = 0; x < BREITE; x++)
    			Feld[y][x] = counter++;
    	}
    
    	// Füllt das 2d array mit '#' an den Rändern und 'leer' in der Mitte
    	for (int i = 0; i < HOEHE; i++)
    	{
    		for (int j = 0; j < BREITE; j++)
    		{
    			if (i == 0 || j == 0 || i == HOEHE - 1 || j == BREITE - 1)
    			{
    				Feld[i][j] = '#';
    			}
    			else
    				Feld[i][j] = ' ';
    		}
    	}
    
    		printf("\n");
    		for (int i = 0; i < HOEHE; i++)
    		{
    			for (int j = 0; j < BREITE; j++)
    			{
    				printf("%c", Feld[i][j]);
    			}
    			printf("\n");
    		}
    
    		free(Feld);
    
    	_getch();
    }
    

    Wenn ich jetzt die Funktion, welche mir das Array mit '#' ausfüllt, außerhalb der main-Funktion setzte:

    #include <stdio.h> 
    #include <conio.h>
    #include <stdlib.h>
    
    typedef unsigned int uint;
    
    int BREITE;
    int HOEHE;
    int** Feld;
    
    void zeichne_kreuzchen()
    {
    	for (int i = 0; i < HOEHE; i++)
    	{
    		for (int j = 0; j < BREITE; j++)
    		{
    			if (i == 0 || j == 0 || i == HOEHE - 1 || j == BREITE - 1)
    			{
    				Feld[i][j] = '#';
    			}
    			else
    				Feld[i][j] = ' ';
    		}
    	}
    }
    
    main()
    {
    	uint BREITE, HOEHE;
    	printf("Wie gross soll die Y-Dimension sein? ");
    	scanf_s("%d", &HOEHE);
    	printf("Wie gross soll die X-Dimension sein? ");
    	scanf_s("%d", &BREITE);
    
    	Feld = malloc(HOEHE * sizeof(int*));
    	for (int y = 0; y < HOEHE; y++)
    		Feld[y] = malloc(BREITE * sizeof(int));
    
    	int counter = 0;
    	for (uint y = 0; y < HOEHE; y++)
    	{
    		for (uint x = 0; x < BREITE; x++)
    			Feld[y][x] = counter++;
    	}
    
    	zeichne_kreuzchen();
    
    		printf("\n");
    		for (int i = 0; i < HOEHE; i++)
    		{
    			for (int j = 0; j < BREITE; j++)
    			{
    				printf("%c", Feld[i][j]);
    			}
    			printf("\n");
    		}
    
    		free(Feld);
    
    	_getch();
    }
    

    gibt die Konsole nur Käse aus.

    Ich weiß nicht wieso...

    Grüße

    Johannes



  • Benutze Code Tags so kann man das kaum lesen vor allen Dingen bei so einem langen Code



  • johannes2.0 schrieb:

    gibt die Konsole nur Käse aus.

    Weil dein Code Käse ist.
    Aktiviere mal die Warnungen, du vergleichst signed mit unsigned Werten.
    Globale Variablen gehören auch raus und du hast kein return in der main Funktion.

    #include <conio.h>
    

    ist nicht standard

    scanf_s("%d", &HOEHE);
    

    scanf_s lässt sich nicht wie scanf benutzen, woher hast du das?

    Lernst du mit einem Buch? Wenn ja dann wirf es weg.



  • Ok es lag an den globalen Variablen bzw. an der doppelten Deklaration.
    Ich habe sie entfernt und es funktioniert.

    Danke schön für den Hinweis



  • In C schreibt man i.A. Preprozessor-Makros groß und Variabeln klein.


Log in to reply