¿Por qué no estoy obteniendo el resultado adecuado?

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; } 

¿Por qué no obtengo mi salida como 1,2,3,4,5,6,7,8,9,10,10?

Estoy devolviendo la dirección de la matriz desde func () pero todavía estoy recibiendo valores no deseados.

¡Guau! ¡Dale una oportunidad a la nueva persona!

La respuesta es “scope”. Si comstacks con gcc, obtienes una advertencia muy obvia:

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

La variable local se pierde cuando la función sale y su asignación de memoria se ha limpiado.

Si desea devolver una matriz desde una función, debe hacerlo para crear una asignación de memoria no local y luego devolver el puntero.

Está devolviendo un puntero a una variable local, lo que resulta en un comportamiento indefinido.

La forma más común de lidiar con las funciones que devuelven arrays es pasar la matriz del llamante, por ejemplo, la versión fija de su código:

 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; }