Pourquoi est-ce que je ne reçois pas le bon résultat?

int*func(); int main() { int i; int *ptr; ptr=func(); for(i=0;i<10;i++) { printf("%d ",*ptr); ptr++; } } int* func() { int arr[10]; int i; for( i=0;i<10;i++) arr[i]=i+1; return arr; } 

Pourquoi je ne reçois pas ma sortie en tant que 1,2,3,4,5,6,7,8,9,10 ??

Je retourne l’adresse du tableau de func () mais je reçois toujours des valeurs indésirables.

Wow – vote négatif agressif! Donnez une chance à la nouvelle personne!

La réponse est “scope”. Si vous comstackz avec gcc, vous obtenez un avertissement très évident:

 C:\tmp>gcc test.c test.c: In function `func': test.c:22: warning: function returns address of local variable 

La variable locale est perdue lorsque la fonction est fermée et que son allocation de mémoire est nettoyée.

Si vous voulez renvoyer un tableau à partir d’une fonction, vous devez le malloc pour créer une allocation de mémoire non locale, puis renvoyer le pointeur.

Vous retournez un pointeur sur une variable locale, ce qui entraîne un comportement indéfini.

Le moyen le plus courant de traiter les fonctions qui renvoient des tableaux consiste à transmettre le tableau à l’appelant, par exemple une version fixe de votre code:

 void func(int arr[]); int main() { int arr[10]; func(arr); for (int i = 0; i < 10; i++) printf("%d ", arr[i]); return 0; } void func(int arr[]) { for (int i = 0; i < 10; i++) arr[i] = i + 1; }