Wo abfragen, ob malloc geklappt hat



  • Hab mal ne etwas komische Frage, die mir eben so durch den Kopf gegangen ist. Wenn ich ein 1-dimensionales Array anlege, dann kann ich danach den Pointer Abfragen, ob genügend Speicher allokiert werden konnte:

    int dim = 5;
    
        int *array = (int*)malloc(sizeof(int)*dim);
    
        if(array == NULL)
            error("Nicht genügend Speicher");
    

    Wie macht man das bei nem 2-dimensionalen Array? So wie der folgende Code aussieht finde ich es ein wenig eigenartig. Oder ist das so richtig?

    int dim = 5;
    
        int **array = (int**)malloc(sizeof(int)*dim);
        if(array == NULL)
            error("Nicht genügend Speicher");
    
        for(int i=0; i<dim; i++) {
            array[i] = (int*)malloc(sizeof(int)*dim);
            // wirklich so ?
            if(array[i] == NULL)
                error("Nicht genügend Speicher");
        }
    


  • Ja, das ist so richtig - du mußt theoretisch für jeden einzelnen malloc()-Aufruf überprüfen, ob er geklappt hat. (wenn dir das komisch vorkommt, kannst du die Fehlerbehandlung auch in eine Hilfsfunktion auslagern)



  • DarthZiu schrieb:

    Oder ist das so richtig?

    eigentlich schon. man muss jedes malloc einzeln abfragen.
    aber du könntest ja auch so'n array mit einem malloc erzeugen

    int *array = malloc (sizeof(int)*zeilen*spalten);
    

    nur der zugriff gestaltet sich dann etwas anders

    int element_5_2 = array[5*spalten+2];
    

Anmelden zum Antworten