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.Bsubroutine(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