Retornando matrizes de uma função em c ++

Estou tentando retornar uma matriz de uma função:

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

Eu passo duas matrizes do meumain() na minhauni() função. Lá eu crio uma nova matrizc[10] que eu volto para o meumain(). No meuuni() função eu tento mesclar os números não negativos nas duas matrizesa eb.

Mas eu recebo algo assim como minha saída.

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

Considerando que quando tento imprimir os valores dec[10] nouni() função, imprime os valores corretos. Por que isso acontece?? Isso é algo relacionado à pilha? Porque eu tentei pesquisar sobre esse meu erro e encontrei alguns lugares no stackoverflow, onde diz quedo not allocate on stack mas não consegui entender.

Além disso, seria muito fácil se eu alocasse minha matriz globalmente, mas se for esse o caso, tudo será declarado globalmente? Por que estamos preocupados em passar ponteiros de funções? (Eu tenho um capítulo no meu livro para passar sugestões)

questionAnswers(3)

yourAnswerToTheQuestion