Heim > Artikel > Backend-Entwicklung > Wie kann ich ein Array von einer Funktion in C zurückgeben, ohne Daten zu verlieren?
Arrays von einer Funktion in C zurückgeben
Bei der Rückgabe eines Arrays von einer Funktion in C ist es wichtig, die Feinheiten der Speicherverwaltung zu verstehen . Standardmäßig werden lokale Arrays, die auf dem Stapel innerhalb der Funktion zugewiesen sind, zerstört, wenn die Funktion beendet wird. Dieses Verhalten führt zu undefiniertem Verhalten, wenn versucht wird, außerhalb der Funktion auf diese Arrays zuzugreifen.
Im bereitgestellten Code wird ein Array c auf dem Stapel innerhalb der Uni-Funktion erstellt:
<code class="c++">int c[10];</code>
Obwohl dieses Array in der Funktion erfolgreich mit Werten gefüllt wird, gehen die Werte verloren, sobald die Funktion zurückkehrt und das Array zerstört wird. Dies führt zu der unerwarteten Ausgabe, auf die Sie stoßen.
Um dieses Problem zu lösen, können Sie zwei alternative Ansätze anwenden:
Verwenden eines Zeigers:
Ändern die Uni-Funktion, um einen Zeiger auf das zugewiesene Array zurückzugeben:
<code class="c++">int* uni(int *a,int *b) { int* c = new int[10]; // Allocate array on heap int i = 0; // ...same code as before... return c; }</code>
Im Wesentlichen sollten Sie für die Freigabe des im Heap zugewiesenen Speichers verantwortlich sein:
<code class="c++">int main() { // ...same code as before... delete[] c; // Deallocate array from heap // ... }</code>
Using eine Struktur:
Ein anderer Ansatz besteht darin, das Array in eine Struktur einzuschließen und die Struktur zurückzugeben:
<code class="c++">struct myArray { int array[10]; }; myArray uni(int *a,int *b) { myArray c; int i = 0; // ...same code as before... return c; }</code>
In diesem Fall wird die Struktur als Wert zurückgegeben, wodurch eine Kopie von sichergestellt wird Das Array wird in der Hauptfunktion erstellt. Strukturrückgabewerte können aufgrund der Wertesemantik von Strukturen effizient kopiert werden.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Array von einer Funktion in C zurückgeben, ohne Daten zu verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!