Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно перевыделять память? / 5 сообщений из 5, страница 1 из 1
27.10.2017, 11:54
    #39543112
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно перевыделять память?
Реализую двумерный динамический массив. При его создании количество элементов по обоим измерениям точно не известно.

Поэтому хочется как-то оптимально перевыделять память:
1. delete и new убивают весь кусок памяти и создают его по новой.
2. realloc не переносит старые данные в новую память, поскльку у нее в параметрах нет размера старого объема памяти.

Как подобную задачу решить лучше всего?

p.s. Второе измерение массивов принимает большИе значения (порядка миллиона), поэтому желательна конструкция "массив массивов" (а не один кусок, в котором с помощью размеров массива и двух индексов определяется текущий единый индекс).
...
Рейтинг: 0 / 0
27.10.2017, 12:06
    #39543124
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно перевыделять память?
Я правильно понимаю, что функция realloc получает указатель на старый кусок, чтобы попытаться там же и выделить память?
...
Рейтинг: 0 / 0
27.10.2017, 14:07
    #39543295
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно перевыделять память?
AlekseySQL,
std::map<std::pair<size_t,size_t>,type_to_store>
Можно обращаться к любой паре (x / y), можно проверить существование элемента, можно не хранить отсутствующие.
...
Рейтинг: 0 / 0
27.10.2017, 14:35
    #39543323
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно перевыделять память?
AlekseySQL2. realloc не переносит старые данные в новую память, поскльку у нее в параметрах нет размера старого объема памяти.
Ошибаешься, realloc переносит http://www.cplusplus.com/reference/cstdlib/realloc/?kw=realloc

AlekseySQLp.s. Второе измерение массивов принимает большИе значения (порядка миллиона), поэтому желательна конструкция "массив массивов" (а не один кусок, в котором с помощью размеров массива и двух индексов определяется текущий единый индекс).
Можешь вектором сделать
Код: plaintext
1.
std::vector<std::vector<my_type_t>> arr;
...
Рейтинг: 0 / 0
27.10.2017, 15:45
    #39543380
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно перевыделять память?
Dima T,

спасибо за подсказку по realloc- не думал, что она такая умная!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно перевыделять память? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]