Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
#1

Как выделить некоторую память после некоторого адреса - C++

02.04.2013, 03:05. Просмотров 315. Ответов 8
Метки нет (Все метки)

В общем, есть указатель на конец последовательности (пусть будет pointer) какого-то типа, допустим int.
Требуется добавить в конец последовательности еще один элемент, то есть для начала надо выделить память размером 4байта (под int) сразу после pointer.
Как это сделать? Не спрашивайте почему и для чего)) Просто спортивный интерес)
Знаю, что надо копать в сторону std::allocator_traits
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2013, 03:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как выделить некоторую память после некоторого адреса (C++):

Как выделить память? - C++
Нужно заполнить треугольную матрицу вида 1 1 1 1 1 - 1 - - На элементы с "-" память не должна выделяться. ...

Как выделить память с new? - C++
struct stat *buf; Как для структуры выделить память? Много способов перепробовал, но выдает ошибку. Добавлено через 3...

Как выделить память на HEX-е - C++
http://www.cyberforum.ru/attachment.php?attachmentid=578800&stc=1&d=1443205705 ...

Как выделить память для класса - C++
Привет, я пишу библиотеку управления памятью. На данный момент я выделяю память вот так void * __cdecl MyAlloc(size_t size) { void *...

Как выделить память под массив в структуре? - C++
Здравствуйте , воnрос конечно глуnый , но голову я сижу ломаю долго , есть Структура , в ней есть массив , как nод этот массив выделить...

Как выделить память для двухмерного массива? - C++
Как выделить память для двухмерного массива в С++ a=new int???

8
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
02.04.2013, 03:09 #2
А зачем тебе это нужно?
Сразу выделяй столько сколько нужно, либо выделяй новый указатель нужного размера, и перекопируй элементы.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
02.04.2013, 03:12  [ТС] #3
Это медленный способ и мне он не подходит.

Цитата Сообщение от ninja2 Посмотреть сообщение
А зачем тебе это нужно?
Любопытство. Как то ж СТЛовские контейнеры это делают)
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
02.04.2013, 08:46 #4
Цитата Сообщение от Olivеr Посмотреть сообщение
Это медленный способ и мне он не подходит.


Любопытство. Как то ж СТЛовские контейнеры это делают)
Да наверно так же и делают. Заново выделяют указатель побольше, а затем перекопируют элементы.

Добавлено через 3 часа 36 минут
Либо они могут выделить новый указатель и хранить часть элементов в старом указателе, а часть в новом.
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,645
Записей в блоге: 3
Завершенные тесты: 1
02.04.2013, 09:12 #5
Си'шный realloc запрашивает память сразу за уже выделенной.
1
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
02.04.2013, 12:39  [ТС] #6
Croessmah, а если нужно уменьшить на один элемент, то тоже использовать realloc ?
C++
1
2
3
4
    int *pointer = (int*) malloc(10*sizeof(int)); //10 элементов
    if (pointer)
        pointer = (int*) realloc(pointer,9*sizeof(int)); //уменьшили на 1
    free(pointer);
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,645
Записей в блоге: 3
Завершенные тесты: 1
02.04.2013, 20:53 #7
Цитата Сообщение от Olivеr Посмотреть сообщение
а если нужно уменьшить на один элемент
лучше просто уменьшать переменную размера, а не перевыделять память.
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.06.2013, 12:28 #8
Цитата Сообщение от Croessmah Посмотреть сообщение
Си'шный realloc запрашивает память сразу за уже выделенной.
это не всегда

C89 (draft)
Код
4.10.3.4 The realloc function

...

Returns

   The realloc function returns either a null pointer or a pointer to
the possibly moved allocated space.
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
15.06.2013, 12:34 #9
Цитата Сообщение от ninja2 Посмотреть сообщение
Да наверно так же и делают. Заново выделяют указатель побольше, а затем перекопируют элементы.
это было бы мучительно неудобно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2013, 12:34
Привет! Вот еще темы с ответами:

Как правильно выделить память под структуру? - C++
имеются структуры struct ship { struct point first; struct point last; }; struct point { int x;

Как выделить память для динамического массива? - C++
Как выделить память для динамического массива? typedef TPrimitives *TPrimitive; //... TPrimitives Primitives; Мне нужно выделить...

Как выделить память под динамический двумерный массив - C++
Добрый день, достаточно простой вопрос, но почему-то он возник, и нагуглить ответ я не смог. Обычно выделял память под двумерный массив...

Как динамически выделить память для строкового массива? - C++
Собственно сам вопрос.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
15.06.2013, 12:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru