Я знаю, что я должен использовать std :: vector, если я хочу создать большой массив в куче.Как сгенерировать и использовать C++ 11 std :: array с новым, чтобы использовать кучу вместо стека?
Однако в моей лекции я должен использовать std :: array. Поскольку для задачи я требую очень больших массивов, я хотел заставить компилятор создать массив в куче вместо стека.
Единственный способ, которым я получил мой компилятор принимает это:
std::array<double,10000000>* array = new array<double,10000000>;
Однако программа вылетает, когда я пытаюсь использовать его, так как он, кажется, вызывает утечку памяти. Есть ли все равно, чтобы обойти это правильно?
редактировать:
Вот часть материала я пытаюсь сделать: Мне нужно создать большой массив, а затем генерировать случайные числа и найти минимум. Я думаю, что остальное должно работать с той же механикой:
В Main:
std::array<double,10000000>* array = new array<double,10000000>;
genrate_array(*array);
std::cout<<"Minimum one loop:" << std::endl;
std::cout<<" " << std::endl;
time_measure<start_size, double>(plain_minimum, *array);
Первая функция шаблона:
template<std::size_t N, typename T>
void genrate_array(std::array<T, N>& test_arr){
//generate the array
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_real_distribution<T> dist_int(0.0,500.0);
for(std::size_t i = 0; i< test_arr.size() ; i++)
{
test_arr[i] = dist_int(mt);
}
}
Второй шаблон функции:
template<std::size_t N, typename T>
T plain_minimum(std::array<T,N>& arr, std::size_t start_index,std::size_t end_index)
{
T min = arr[start_index];
for(std::size_t i = start_index+1; i< end_index ; i++){
if(min > arr[i])
{
min = arr[i];
}
}
return min;
}
Это компилируется, но падает почти мгновенно.
Вам нужно будет выслать код, который вы использовали для его доступа. (Надеюсь, не 'array [3] = 1.0;') –
Утечка памяти не вызывает сбоя. Пожалуйста, предоставьте подробную информацию об аварии. Пожалуйста, прочитайте [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и [Как задать хороший вопрос?] (Http://stackoverflow.com/help/ как к спрашивать). Затем обновите и улучшите * свой вопрос *. –
@MartinNyolt ваша точка отлично, хотя технически утечка памяти может привести к выходу из памяти, что может привести к сбою программы в системах, использующих оптимистичное распределение памяти. – user2079303