Работа с неинициализированной памятью

136
07 октября 2019, 05:30

Для того, чтобы получать неинициализированную область памяти, можно использовать и malloc и std::get_temporary_buffer. Простой пример: чтобы не записать поверх, выделяю неинициализированную область для получения массива с алфавитом

constexpr size_t N = 26;
// вариант №1
char* pch = (char*)malloc(N + 1);
pch[N] = 0;
std::iota(pch, pch + N, 'a');
std::cout << pch << std::endl; 
free(pch);

То же самое можно сделать так:

//вариант 2
auto p = std::get_temporary_buffer<char>(N);
char* arr = p.first;
std::iota(arr, arr + p.second, 'a');
arr[p.second] = 0;
std::cout << arr;
std::return_temporary_buffer(arr);

Что может являться причиной того, чтобы прибегнуть ко второму варианту? P.S. Столкнулся с данной проблемой выбора при реализации метода reserve некого контейнера

READ ALSO
Copy ellision и 17 стандарт

Copy ellision и 17 стандарт

Возникло несколько вопросав в связи с copy ellision, c++17 и использованием компилятора clang++-8

128
Как ввести строку посредством scanf?

Как ввести строку посредством scanf?

допустим есть структура

95
Отличие scanf/printf от cin/cout в С++

Отличие scanf/printf от cin/cout в С++

В чём основное отличие этих способов ввода/вывода? Можно ли в C++ использовать спокойно функции scanf/printf или есть какие-то подводные камни?

127
GetHBITMAP утечка памяти

GetHBITMAP утечка памяти

Почему здесь происходит утечка памяти?

110