Devolver matrices de una función en c ++

Estoy tratando de devolver una matriz de una función:

#include <iostream>

using namespace std;
int* uni(int *a,int *b)
{
    int c[10];
    int i=0;
    while(a[i]!=-1)
    {
        c[i]=a[i];
        i++;
    }
    for(;i<10;i++)
        c[i]=b[i-5];

    return c;
}
int main()
{
    int a[10]={1,3,3,8,4,-1,-1,-1,-1,-1};
    int b[5]={1,3,4,3,0};
    int *c=uni(a,b);
    for(int i=0;i<10;i++)
        cout<<c[i]<<" ";
    cout<<"\n";

    return 0;
}

Paso dos matrices de mimain() en miuni() función. Allí creo una nueva matrizc[10] que vuelvo a mimain(). En miuni() Intento fusionar los números no negativos en las dos matricesa yb.

Pero obtengo algo como esto como mi salida.

1 -1078199700 134514080 -1078199656 -1216637148 134519488 134519297 134519488 8 -1078199700 

Mientras que cuando intento imprimir los valores dec[10] en eluni() función imprime los valores correctos. ¿¿Por qué pasó esto?? ¿Es esto algo relacionado con la pila? Porque he intentado buscar sobre este error mío, y encontré algunos lugares en stackoverflow, donde dice quedo not allocate on stack Pero no pude entenderlo.

Además, sería muy fácil si asigno mi matriz globalmente, pero si este es el caso, ¿entonces todo se declarará globalmente? ¿Por qué nos preocupa pasar punteros de las funciones? (Tengo un capítulo en mi libro para pasar punteros)

Respuestas a la pregunta(3)

Su respuesta a la pregunta