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

Динамическое выделение памяти под массив - C++

Восстановить пароль Регистрация
 
nicenice
3 / 3 / 0
Регистрация: 22.11.2011
Сообщений: 168
22.03.2014, 13:55     Динамическое выделение памяти под массив #1
Доброго времени суток.
Как реализовать динамическое выделение памяти под массив, к примеру размера n, при том, что значение этого n в процессе вычисления увеличится? Т. е. выделяется память под массив, но её скорее всего не хватит, насколько именно не хватит неизвестно, известно, что n нужно увеличить на неопределенное значение.
Для наглядности написал пример, не стоит вникать в его логическую адекватность.
C++
1
2
3
4
5
6
7
8
9
void function (int n, int x)
{
    double* y = new double [n];
 
    for(int i=0;i<n;++i){
        y[i] = sin(x+i);
        if(y[i] == 1) n *= 2;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
22.03.2014, 13:58     Динамическое выделение памяти под массив #2
Цитата Сообщение от nicenice Посмотреть сообщение
Как реализовать динамическое выделение памяти под массив, к примеру размера n, при том, что значение этого n в процессе вычисления увеличится?
Удалять старый массив и выделять память под новый, уже другого размера.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
22.03.2014, 14:00     Динамическое выделение памяти под массив #3
nicenice, когда начнет не хватать, выделяешь больший кусок памяти, копируешь туда все из старой памяти, и освобождай старую память. Так (упрощенно) работают стандартные контейнеры vector, map, deque, ...
И еще не забываем о placement new.
nicenice
3 / 3 / 0
Регистрация: 22.11.2011
Сообщений: 168
22.03.2014, 14:01  [ТС]     Динамическое выделение памяти под массив #4
MicM, я это понимаю, но КАК это сделать? Вот, например, в приведенном мною коде.
gromo, ок, продемонстрировать это в моем примере?
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
22.03.2014, 14:10     Динамическое выделение памяти под массив #5
Вариант еще есть, malloc/free..А переопределение с помощью realloc
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
22.03.2014, 14:20     Динамическое выделение памяти под массив #6
nicenice, так например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void function (int n, int x)
{
    double* y = new double [n];
 
    for(int i=0;i<n;++i)
    {
        y[i] = sin(x+i);
        if(y[i] == 1)
        {
            double *tmp = new double[n];
            for (int j=0; j<n; j++)
                tmp[j] = y[j];
            n*=2;
            delete [] y;
            y = new double[n];
            for (int j=0; j<n/2; j++)
                y[j] = tmp[j];
            delete [] tmp;
        }
    }
}
Yandex
Объявления
22.03.2014, 14:20     Динамическое выделение памяти под массив
Ответ Создать тему
Опции темы

Текущее время: 03:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru