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 anmain()
(so wie du es jetzt machst).