Renvoi de tableaux à partir d'une fonction en C
Lors du retour d'un tableau à partir d'une fonction en C, il est essentiel de comprendre les subtilités de la gestion de la mémoire . Par défaut, les tableaux locaux alloués sur la pile au sein de la fonction sont détruits à la sortie de la fonction. Ce comportement conduit à un comportement indéfini si des tentatives sont faites pour accéder à ces tableaux en dehors de la fonction.
Dans le code fourni, un tableau c est créé sur la pile au sein de la fonction uni :
<code class="c++">int c[10];</code>
Bien que ce tableau soit rempli avec succès avec les valeurs de la fonction, les valeurs sont perdues une fois la fonction renvoyée et le tableau est détruit. Cela entraîne le résultat inattendu que vous rencontrez.
Pour surmonter ce problème, vous pouvez adopter deux approches alternatives :
À l'aide d'un pointeur :
Modifier la fonction uni pour renvoyer un pointeur vers le tableau alloué :
<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>
En principal, vous devriez être responsable de la désallocation de la mémoire allouée dans le tas :
<code class="c++">int main() { // ...same code as before... delete[] c; // Deallocate array from heap // ... }</code>
Utiliser a Struct :
Une autre approche consiste à envelopper le tableau dans une structure et à renvoyer la structure :
<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>
Dans ce cas, la structure est renvoyée par valeur, garantissant une copie de le tableau est créé dans la fonction principale. Les valeurs de retour des structures peuvent être copiées efficacement en raison de la sémantique des valeurs des structures.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!