malloc in Funktionen



  • Hey ich habe eine Frage, wieso kann ich in einer Funktionen keinen Speicher allozieren?

    Hier mein Beispielcode

    #include <stdio.h>
    #include <stdlib.h>
    
    void locke (int *array)
    {
         array=malloc(4*sizeof(int));
         if (array == NULL )
         {
                   printf("malloc lief schief!\n");
         }
         *(array+3)=400;
    }
    
    int main(int argc, char *argv[]) {
    
        int *array;
    
        array = malloc (3*sizeof(int));
    
        array[0]=100;
        array[1]=200;
        array[2]=300;
    
        //add(ptr1,array,3);
    
        locke(array);
    
        for (int i=0; i < 4;i++)
        {
            printf("%d\n",*(array+i));
        }
    
        system("PAUSE");
    }
    

    Wenn ich das Programm nun starte, steht als 4 Wert i.ein Wert.
    Wieso funktioniert das nicht?



  • Die Parameter einer Funktion existieren nur als lokale Kopie auf dem Stack. Wenn du den Wert eines Pointers verändern möchtest, musst du ein int** übergeben. Allerdings funktioniert malloc() so trotzdem nicht, da du den Zeiger auf den alten Speicherbereich verlierst. Guck dir mal realloc() an.



  • okay danke für deine antwort. Ich werde mir heute realloc() angucken 😉



  • ⚠ auch wenn du in locke() realloc benutzt, kommt der neue Wert für array nicht zurück an main() (so wie du es jetzt machst).


Anmelden zum Antworten