Возврат массивов из функции в c ++

Я пытаюсь вернуть массив из функции:

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

Я передаю два массива из моегоmain() в мойuni() функция. Там я создаю новый массивc[10] который я возвращаю к своемуmain(), В моемuni() Функция, которую я пытаюсь объединить неотрицательные числа в двух массивахa а такжеb.

Но я получаю что-то вроде этого в качестве своего вывода.

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

Принимая во внимание, что когда я пытаюсь напечатать значенияc[10] вuni() Функция печатает правильные значения. Почему это происходит? Это что-то связано со стеком ?? Потому что я попытался найти эту ошибку и нашел несколько мест в стеке, где говорится, чтоdo not allocate on stack но я не мог этого понять.

Кроме того, было бы очень легко, если бы я распределил свой массив глобально, но если это так, то все должно быть объявлено глобально ?? Почему мы даже беспокоимся о передаче указателей из функций ?? (В моей книге есть глава для прохождения указателей)

Ответы на вопрос(3)

Ваш ответ на вопрос