Zu guter Letzt hat CB einen sehr guten Link gepostet (da ich auch mal ganz stark annehme dass du C++ benötigst):
Das Array existiert nur innerhalb der Methode. Wenn die Methode mit dem return-Statement verlassen wird, wird der Inhalt des Speichers an dieser Stelle undefiniert.
das ist in sofern gar nicht so schlecht, weil Arrays in C++ kein „length“ Attribut und auch keine Checks ob du Daten in die Position -1 oder +800 schreibst, wie in Java haben.
Am besten übergibst du ein selbst erstelltes Array noch in der Methode.
Array in C sind sehr „roh“. Da kann man viel Mist damit machen.
Grundsätzlich ist es erstmal so, dass ein Array, der innerhalb einer Funktion deklariert ist, nicht „nach draußen“ gegeben werden darf. Der Grund: Sobald die Funktion verlassen wird, wird der Array „„ungültig““. (Eklig wird das dadurch, dass das ~„oft (erstmal) zu funktionieren scheint“ - bis dann die bösen crashes kommen).
In C muss man viel allgemeiner und viel, viel „disziplinierter“ als in Java auf die Frage achten: Wem ‚gehört‘ der Speicher?. Eine Faust- (oder Daumen?) - Regel ist: Wer den Speicher allokiert, muss ihn auch freigeben.
D.h. wenn eine C-Funktion irgendwas mit einem Array machen soll (wie in deinem Beispiel: Ihn füllen), dann wird normalerweise der Array in die Funktion übergeben. Mein C ist ziemlich eingeschlafen, aber GROB so würde das dann aussehen:
int fillArray(int* array, int length) {
if (length < 2) return -1;
array[0] = 123;
array[1] = 234;
return 0;
}
int main() {
int n = 2;
int *array = (int *) malloc(size * sizeof(int)); // Wer es allokiert....
if (!array) return -1;
int result = fillArray(array, n);
...
free(array); // ... gibt es auch frei!
return 0;
}
Was ich da mit dem int-return-Wert angedeutet habe, wäre eine rudimentäre (!) Fehlerbehandlung. Darüber kann man für C ganze Bücher schreiben…
Fun fact:
int* array = ...;
int index = ...;
// Das hier....
array[index] = 123;
// ... ist das gleiche wie das hier...
*(array + index) = 123;
// ... und weil (a+b) das gleiche ist wie (b+a), ist das das gleiche wie das...
*(index + array) = 123;
// ... darum könnte man auch das schreiben:
index[array] = 123;
(Bist du sicher, dass du die Sprache lernen willst? )