Probleme mit Arrays...
-
Hallo, ich hab vor ein paar Wochen angefangen mit C-Programmieren und jetzt bin ich ein bisschen am rumprobieren. Nun hab ich folgendes Problem:
in der main Funktion hab ich ein Array, einfach deklariert durch:
int *array
Nun möchte ich den Speicherplatz für das Array in einer anderen Funktion erst allokieren, z. B. so:
void funktion(int *array) array=malloc(...); array[0]=... array[1]=...
und dann die einzelnen Arrayelemente wie oben beschreiben. Nun ist es aber so, wenn ich dann nach dem Funktionsaufruf wieder in der main-Funktion auf die array-Elemente zugreifen möchte:
printf("%d", array[0]);
so werden keine vernünftigen Werte ausgegeben (also nicht die in der funktion zugewiesenen).
Nun wundert mich das schon ein wenig, da doch Arrays mittels Call-by-reference übergeben werden. Wo liegt denn mein Fehler, und vor allem, wie kann ich es besser machen????
Danke schonmal für eure Hilfe,
Grüße, JC
-
Auch der Pointer wird nur call-by-value übergeben. D.h. die Zuweisung erfolgt an die lokale Kopie.
Lösen könntest du es so:
void funktion(int** array) { *array = (int*)malloc(sizeof(int) * n); (*array)[0] = 1; (*array)[1] = 2; // usw } Aufruf: int* p; funktion(&p);
-
Danke schonmal für die schnelle Antwort, und wie deklariere ich das Array in der main-Fkt und übergebe es an die andere Funktion?
Danke dir,
JC.
-
Johannis schrieb:
Danke schonmal für die schnelle Antwort, und wie deklariere ich das Array in der main-Fkt und übergebe es an die andere Funktion?
Danke dir,
JC.Ein kleines Beispielprogramm:
#include <stdio.h> #include <malloc.h> void funktion(int** array) { *array = (int*)malloc(sizeof(int) * 3); (*array)[0]= 11; (*array)[1] = 22; (*array)[2] = 33; } int main() { int i; int* p; funktion(&p); for(i=0; i < 3; i++) printf("p[%i]=%i\n", i, p[i]); free(p); }
-
Ok..., hatte den "Aufruf"-Teil in deinem vorigen Post nicht gesehen
. Ist alles klar, danke dir für die Hilfe!
Grüße,
JC