Возможным решением является копирование выделенного массива стека:
#include <iostream>
#include <cstring>
int* g_arr = nullptr;
std::size_t n = 0;
void f() {
int arr[]{1, 2, 3};
n = sizeof(arr) / sizeof(*arr);
delete[] g_arr;
g_arr = new int[n];
std::memcpy(g_arr, arr, sizeof(arr));
}
void b() {
std::cout << n << '\n';
for (std::size_t i = 0; i != n; ++i) {
std::cout << g_arr[i] << '\n';
}
}
int main() {
f();
b();
}
Если вы можете, используйте вектор:
#include <iostream>
#include <vector>
std::vector<int> g_arr{};
void f() {
g_arr = {1, 2, 3};
}
void b() {
std::cout << g_arr.size() << '\n';
for (int const i : g_arr) {
std::cout << i << '\n';
}
}
int main() {
f();
b();
}