Passer des tableaux : pièges potentiels
Bien que renvoyer des tableaux à partir de fonctions en C semble simple, des complexités cachées peuvent surgir, comme en témoigne l'expérience de l'utilisateur essayer de fusionner des nombres non négatifs de deux tableaux à l'aide d'une fonction.
L'utilisateur a observé un résultat incorrect lors de l'accès au tableau fusionné en dehors de la fonction qui l'a créé. En effet, les tableaux créés sur la pile, comme celui déclaré comme "int c[10]" dans la fonction, sont détruits une fois la fonction terminée. Y accéder ensuite entraîne un comportement indéfini.
Pour résoudre ce problème, une option consiste à remplacer le tableau local par une structure qui contient le tableau. Lorsque la structure est renvoyée, son tableau interne est copié dans la mémoire de la fonction appelante, évitant ainsi le problème de destruction de la pile. Voici un exemple :
<code class="cpp">struct myArray { int array[10]; }; myArray uni(int *a, int *b) { myArray c; // Same logic as before for merging arrays return c; }</code>
Dans main, la structure renvoyée peut être attribuée et le tableau interne accessible :
<code class="cpp">myArray c = uni(a, b); for (int i = 0; i < 10; i++) { cout << c.array[i] << " "; }</code>
Une autre solution consiste à utiliser un pointeur pour allouer de la mémoire au tableau dynamiquement, comme indiqué dans votre chapitre « Passage de pointeurs ». Cependant, cela introduit la nécessité de gérer la mémoire manuellement et d'éviter les fuites de mémoire.
Le choix de l'approche dépend d'exigences spécifiques, mais comprendre ces pièges est crucial lorsque l'on travaille avec des tableaux dans des fonctions.
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!