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

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

Войти
Регистрация
Восстановить пароль
 
nicenice
3 / 3 / 0
Регистрация: 22.11.2011
Сообщений: 168
#1

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

22.03.2014, 13:55. Просмотров 466. Ответов 5
Метки нет (Все метки)

Доброго времени суток.
Как реализовать динамическое выделение памяти под массив, к примеру размера 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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2014, 13:55     Динамическое выделение памяти под массив
Посмотрите здесь:

C++ Динамическое выделение памяти под объект
C++ Динамическое выделение памяти под двумерный массив
Динамическое выделение памяти под двумерный массив C++
Динамическое выделение памяти под объект класса C++
C++ Как работает динамическое выделение памяти под объект?
Динамическое выделение памяти под структуру C++
C++ Статический массив - динамическое выделение памяти!?
Динамическое выделение памяти под двумерный массив C++
C++ Динамическое выделение памяти под массив
C++ Динамическое выделение памяти под строки в стиле Си
Динамическое выделение памяти под структуру (malloc) C++
Динамическое выделение памяти под массив структур (new/delete) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
22.03.2014, 13:58     Динамическое выделение памяти под массив #2
Цитата Сообщение от nicenice Посмотреть сообщение
Как реализовать динамическое выделение памяти под массив, к примеру размера n, при том, что значение этого n в процессе вычисления увеличится?
Удалять старый массив и выделять память под новый, уже другого размера.
gromo
 Аватар для gromo
367 / 266 / 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     Динамическое выделение памяти под массив
Ответ Создать тему
Опции темы

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