В вашем коде returnArray
возвращает указатель на первый элемент myArray
, который является локальным для функции. Когда функция возвращается, память ее локальных переменных освобождается по мере извлечения стека вызовов, поэтому ее можно использовать для других целей. В этом случае, поскольку после этого вы вызываете printArray
, область стека, первоначально занятая returnArray
, повторно используется для printArray
, поэтому память, которая изначально содержала myArray
, теперь имеет непредсказуемый контент.
Как отметил Джеймс Канз, лучший способ достичь желаемого - это использовать std::vector<int>
вместо int*
, что-то вроде
std::vector<int> returnArray()
{
int myArray[5] = { 1, 2, 3, 4, 5 };
std::vector<int> result(myArray, myArray + 5);
return result
}
И измените другие функции соответственно, чтобы взять вектор. Обратите внимание, что в printArray
вам необходим myVector[0]
для доступа к первому элементу, поскольку векторы не являются указателями.