Eso esta mal, cuando se termina la funcion se va a perder los datos porque ese arreglo se define en la memoria volatil.
Primero de todo para resolver el problema de como llamarlo deberas devolver un puntero al arreglo. Segundo deberas usar new o malloc para reservar memoria dinamica(malloc se usa en C, para C++ es recomendable new).
Código C++:
Ver originalint * crear(int longitud)
{
return new[longitud];
}
void procesar(int * pila)
{
cout << pila[5] <<endl;
}
int main()
{
int * pila = crear(10);
pila[5] = 10;
procesar(pila);
}