Ваш массив размещен в стеке, поэтому, как только функция вернется, он будет освобожден. Итак, вы хотите вернуть указатель на мертвую память.
Но вы этого не делаете, вы просто возвращаете действительное (копию) значение 0-го элемента массива.
Итак, что вы должны сделать:
- Лучшей идеей было бы переключиться на контейнеры stl. Вы должны использовать std :: vector или что-то в этом роде.
- Если вы придерживаетесь идеи ручного управления памятью, вы должны выделить массив в куче, вернуть его из функции и, возможно, освободить его в вызывающей программе.
Edit:
в основном вы хотите следующее:
using namespace std;
vector<int> arrayfunc()
{
vector<int> v;
v.push_back(10);
...
return v;
}
...
vector<int> result = arrayfunc();
cout << result[0] << ...
Это был бы правильный путь C ++.
(Nitpicking :) Вам не нужно заботиться о копировании вектора, потому что RVO используется всеми современными компиляторами C ++.
Выделение массива в куче также должно быть простым:
int* array = new int[4];
array[0] = 10;
...
return array;
...
int* array = arrayfunc();
...
delete[] array;
Но я бы настоятельно рекомендовал использовать прежний подход (с вектором).