Dynamischer Speicher



  • Ich habe es soeben versucht, aber es werden mir nun mehrere Fehler angezeigt.

    #include <stdio.h>
    #include <stdlib.h>
    
    void Geruest(char FELD[9][]) {
        int i;
        int j;
        char FELD[9][9];
    
    	for(j=0; j<9; j++) {
    
               for(i=0; i<9; i++) {
    
                    FELD[j][i];
    
                    if(i%2==0) {
                            FELD[j][i]='|';
                    }
    
                    if(i%2!=0) {
                        if(j%2==0) {
                            FELD[j][i]='-';
                        }
                        if(i%2!=0) {
                            FELD[j][i]='x';
                        }
                    }
    
               }
    	}
    }
    
    void Ausgabe(char FELD[9][]) {
        int i;
        int j;
    
        char FELD[9][9];
    
        printf("   0   1   2   3   4   5   6   7   8\n\n");
    
        for (j=0; j<9; j++){
    
                for(i=0; i<9; i++){
    
                    printf("%i  %c ",j,FELD[j][i]);
                    //printf("\n");
                }
                printf("\n\n");
        }
    }
    
    int main() {
    
        char FELD[9][9];
    
        Geruest(FELD[9][]);
        Ausgabe(FELD[9][]);
    
    	return 0;
    }
    


  • Was du da machst, ist auch falsch.

    #include <stdio.h>
    #include <stdlib.h>
    
    void Geruest(char FELD[9][]) {
        int i;
        int j;
        char FELD[9][9]; //Diese Variable existiert schon als Funktionsparameter, also weg damit
    
        for(j=0; j<9; j++) {
    
               for(i=0; i<9; i++) {
    
                    FELD[j][i];
    
                    if(i%2==0) {
                            FELD[j][i]='|';
                    }
    
                    if(i%2!=0) {
                        if(j%2==0) {
                            FELD[j][i]='-';
                        }
                        if(i%2!=0) {
                            FELD[j][i]='x';
                        }
                    }
    
               }
        }
    }
    
    void Ausgabe(char FELD[9][]) {
        int i;
        int j;
    
        char FELD[9][9]; //Diese hier auch
    
        printf("   0   1   2   3   4   5   6   7   8\n\n");
    
        for (j=0; j<9; j++){
    
                for(i=0; i<9; i++){
    
                    printf("%i  %c ",j,FELD[j][i]);
                    //printf("\n");
                }
                printf("\n\n");
        }
    }
    
    int main() {
    
        char FELD[9][9];
    
        Geruest(FELD[9][]); //richtig wäre Geruest(FELD);
        Ausgabe(FELD[9][]); //richtig wäre Ausgabe(FELD);
    
        return 0;
    }
    

    btw. hast du je nach System irgendwelchen Müll in nicht-initialisierten Variablen, Feldern, was auch immer drin stehen, weshalb ein

    for(i=0;i<9;i++)
    {
    for(j=0;j<9;j++)
    {
    FELD[i][j]=0;
    }
    }
    

    nicht verkehrt ist.



  • HansKlaus schrieb:

    void Geruest(char FELD[9][])
    

    Ne ne ne, so geht das nicht.
    Du kannst den ganz linken Index offen lassen. Alle anderen müssen bekannt sein.

    void Geruest(char FELD[][9])
    

    Warum das so ist, kannst du evtl bei https://www.c-plusplus.net/forum/p2481703#2481703 nachvollziehen.

    Cobain schrieb:

    int main() {
     
     
        char FELD[9][9];
     
        Geruest(FELD[9][]);
        Ausgabe(FELD[9][]);
     
     
        return 0;
    }
    

    Den Aufruf der Funktionen hat HansKlaus aber so nicht geschrieben.

    Auch den Scheiß mit dem lokalen Feld, das den gleichen Namen hat wie ein Parameter, kannst du nicht machen.



  • ich habe etwas weiter gemacht und der jetzige Code funktioniert und gibt mir geforderte tabelle aus. Das Problem, dass ich jetzt immer noch habe ist der Einsatz von "malloc" in meinem Code.

    #include <stdio.h>
    #include <stdlib.h>
    
    void Geruest(char FELD[9][9]) {
        int i;
        int j;
        //char FELD[9][9];
    
    	for(j=0; j<9; j++) {
    
               for(i=0; i<9; i++) {
    
                    FELD[j][i];
    
                    if(i%2==0) {
                            FELD[j][i]='|';
                    }
    
                    if(i%2!=0) {
                        if(j%2==0) {
                            FELD[j][i]='-';
                        }
                        if(j%2!=0) {
                            FELD[j][i]='x';
                        }
                    }
    
               }
    	}
    }
    
    void Ausgabe(char FELD[9][9]) {
        int i;
        int j;
    
        //char FELD[9][9];
    
        printf("   0   1   2   3   4   5   6   7   8\n\n");
    
        for (j=0; j<9; j++){
                printf("%i ",j);
    
                for(i=0; i<9; i++){
    
                    printf(" %c  ",FELD[j][i]);
                    //printf("\n");
                }
                printf("\n\n");
    
        }
    }
    
    int main() {
    
        char FELD[9][9];
    
        Geruest(FELD);
        Ausgabe(FELD);
    
    	return 0;
    }
    


  • Hier ist der Aufruf laut der gesamten Aufgabenstellung zu "malloc."

    "Der Aufbau des dynamischen Speichers soll mit malloc realisiert werden".



  • Cobain schrieb:

    ich habe etwas weiter gemacht und der jetzige Code funktioniert und gibt mir geforderte tabelle aus.

    Der Unterschied zu dem Code aus deinem Eröffnungspost ist, dass du jetzt ein char-Array hast.

    Cobain schrieb:

    Das Problem, dass ich jetzt immer noch habe ist der Einsatz von "malloc" in meinem Code.

    Wie das geht, habe ich schon geschrieben.
    Vieleicht wäre es jetzt doch mal an der Zeit, die genaue Aufgabenstellung zu zeigen.(nicht nur Auszüge)





  • Dann mach das doch, was in der Aufgabenstellung steht.

    Du musst dann nur deine 9en in den for -Schleifen durch DIM_ZEILE bzw DIM_SPALTE ersetzen.

    Nochmal langsam:

    Die #defines werden unter den #include in das Programm eingebaut.

    Da wo du in main das FELD[9][9] hast, kommt das malloc -Beispiel aus der Aufgabenstellung.
    Dann passt du noch die Parameter der Funktionen an.
    Die 9en nicht vergessen.



  • ich glaube ich habe mehrere Fehler gemacht aber versteh nicht so ganz welche.

    #include <stdio.h>
    #include <stdlib.h>
    
    #define GROESSE_FELD 4
    #define DIM_ZEILE GROESSE_FELD * 2 + 1
    #define DIM_SPALTE GROESSE_FELD * 2 + 1
    
    void spielGeruest(char **spielfeld){
     int i = 0, j = 0;
     for(i = 0; i < (DIM_ZEILE); i++){
     for(j = 0; j < (DIM_SPALTE); j++){
     if(!(i%2)){
     if(!(j%2)){
     spielfeld[i][j] = '|';
     }
     else{
     spielfeld[i][j] = '-';
     }
     }
     else{
     if(!(j%2)){
     spielfeld[i][j] = '|';
     }
     else{
     spielfeld[i][j] = 'x';
     }
     }
     }
     }
    }
    
    void ausgabeSpielfeld(char **spielfeld){
    
    int i,j;
    
        for(i=0;i<9;i++) {
                for(j=0;j<9;j++) {
                    printf(" %c ",spielfeld[i][j]);
                }
                printf("\n");
        }
    }
    
    int main () {
    
        int i;
        char spielfeld[DIM_ZEILE][DIM_SPALTE];
    
        char **Feld;
        Feld = (char**)malloc(sizeof(char*)* DIM_ZEILE);
        for(i=0;i<DIM_SPALTE;i++) {
        Feld[i] = (char*)malloc(sizeof(char)* DIM_SPALTE);
        }
    
        ausgabeSpielfeld(Feld);
    
    }
    


  • Cobain schrieb:

    ich glaube ich habe mehrere Fehler gemacht aber versteh nicht so ganz welche.

    Wie stellst du fest, dass da Fehler sind?



  • ich hab den Fehler gefunden! ich habe einfach nur vergessen die Funktionen in der main aufzurufen 😃

    Aufjedenfall Vielen Dank bei der Unterstützung ihr habt mir alle zusammen wirklich sehr weiter geholfen 👍


Anmelden zum Antworten