Globales Array in main() deklarieren?



  • Guten Abend,

    ich arbeite zur Zeit an einem Projekt, was als Argument eine Datei annimmt. In dieser Datei steht die größe für ein 2-Dimensionales Array. Anschließend greife ich mit mehreren Funktionen auf das Array zu. Ich finde es unschicklich, die Werte des Arrays bei jeder Funktion mitzugeben.

    int *Funktion(...,feldx,feldy,feld[feldx][feldy]) {...}
    

    Um dies zu vermeiden wollte ich das Array als Globale deklarien. Das Problem ist, das ich erst in der main Funktion weiß wie groß des Array wird.
    Gibt es eine Möglichkeit, das Array zu globalisieren?



  • Warum nicht mit Pointern arbeiten?



  • Du kannst einen globalen Zeiger definieren und in main, sobald du die Größe des Arrays kennst, via malloc Speicher reservieren. Aber das finde ich unschicklich. Ich würde wahrscheinlich eher einen Typen generieren, der das Feld und Informationen (Dimension etc.) in einer Struktur sammelt. Diese kann man dann immer den Funktionen übergeben.



  • Du kannst einen globalen Zeiger definieren und in main, sobald du die Größe des Arrays kennst, via malloc Speicher reservieren. Aber das finde ich unschicklich. Ich würde wahrscheinlich eher einen Typen generieren, der das Feld und Informationen (Dimension etc.) in einer Struktur sammelt. Diese kann man dann immer den Funktionen übergeben.

    Ich bedanke mich für euere schnellen Antworten.

    Mit

    feld = (int*) malloc(feldx+feldy);
    

    funktioniert es schon ziemlich gut, allerdings ist das Array 1 Dimensional. Gibt es eine Möglichkeit es 2 Dimensional zu machen, oder muss ich rechen^^.

    Bei der 2. möglichkeit bin ich mir nicht sicher was du meinst.

    typedef struct{
        int inhalt;
    } feld;
    
    struct feldinfos{
        int x;
        int y;
    }feldinfos;
    

    Dies unterscheidet sich vom Orginal nicht allzusehr.



  • Fall 1: int **zeiger. Dafür reservierst du einmal für n Zeilen Speicher, und dann für alle 0 bis n-1 Zeiger nochmal Speicher für m Spalten. Oder du rechnest.

    Fall 2: Eher sowas:

    typedef struct {
        int **data;
        size_t dim_x;
        size_t dim_y;
    } field_t;
    

    Den Speicher für Fall 2 reservierst du einfach wie in Fall 1 😉

    Ansonsten allgemein zu malloc: http://www.c-plusplus.net/forum/viewtopic.php?t=206606


Anmelden zum Antworten