Используйте std::vector
, это очень удобно и имеет много полезных алгоритмов, есть функция std::copy
для копирования из одного вектора в другой, посмотрите на свою задачу с помощью векторов:
#include <vector>
#include <iostream>
struct myStruct
{
std::vector<int> arr;
};
int main()
{
myStruct my;
my.arr.push_back(20);
my.arr.push_back(200);
my.arr.push_back(2000);
std::vector<int> ret_arr;
std::copy(my.arr.begin(), my.arr.end(), std::back_inserter(ret_arr));
return 1;
}
И результат на экране:
Если вы хотите использовать язык Си, вы должны передать указатель на указатель (int ** arr), чтобы получить правильное указание после выхода из области видимости. Я покажу два метода, сначала просто указать на уже выделенную память:
void get_back_pointers(myStruct* my ,int** arr, int* size)
{
*arr = my->arr;
*size = my->size;
}
Другое для глубокого копирования, для выделения нового массива и копирования в него данных:
void get_back_copy(myStruct* my ,int** arr, int& size)
{
*arr = (int*) malloc(3 * sizeof(int));
memcpy( *arr, my->arr, my->size * sizeof(int) );
size = my->size;
}
После того, как get_back_copy
пройдено, arr
потребуется для освобождения памяти. В отладчике вы можете видеть результаты, что my.arr
и ret_arr
имеют один адрес, а ret_arr2
имеет другой, потому что он выделен в новой памяти: