calloc in subroutine?



  • Hallo,
    ich habe eine verständnisfrage.
    Wenn ich einen pointer deklariere z.B: double* a;
    dann übergebe ich diesen an eine subroutine z.B

    subroutine(a);

    in der ich dann über calloc alloziiere - wird der speicher nach verlassen der subroutine wieder freigegeben? Eigentlich nicht oder?

    void subroutine(double* a)
    {
    a = (double*)calloc(...);
    }

    ich bekomme so einen segfault...

    gibt es eine möglichkeit einfach den pointer nur zu übergeben und in einer subroutine dann speicher zu alloziieren?



  • double* subroutine()
    {
        return (double*)calloc(...);
    }
    

    oder halt mit einem zeiger auf den zeiger den du verändern willst

    wobei zuweisung klar vorzuziehen ist



  • und was wenn ich z.B mehr als zwei also z.B
    3 arrays über calloc in der subroutine alloziiere?

    eh was meinst du mit zeiger auf zeiger?

    so?

    void subroutine(double* arr1, double* arr2)
    {
        double* a = arr1;
        double* b = arr2;
        a = (double*)calloc(...);
        b = (double*)calloc(...);
    }
    


  • Er meint, du sollst

    void subroutine(double** a)
    

    verwenden.



  • hmm...bei mir gibt das nen segfault...

    so?

    int * a;
    int * b;
    
    subroutine(&a, &b);
    
    ...
    soubroutine(int** a, int** b)
    {
        a = (int**)calloc(...);
        b = (int**)calloc(...);
    }
    


  • ah habs jetzt....merci....

    so gehts:

    int * a;
    int *b;
    
    subroutine(&a, &b);
    
    soubroutine(int ** a; int ** b)
    {
        *a = (double*)calloc...;
        ....
    }
    


  • Vielleicht solltest du dir mal ansehen, wie in C Parameter übergeben werden (call by value) - und wie du Referenz-Semantik darstellen kannst 😉


Anmelden zum Antworten