Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
nicenice
3 / 3 / 2
Регистрация: 22.11.2011
Сообщений: 168
1

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

22.03.2014, 13:55. Просмотров 583. Ответов 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;
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2014, 13:55
Ответы с готовыми решениями:

Динамическое выделение памяти под массив
Я хочу функцию использовать пару раз, количество команд будет уменьшаться, и &quot;n&quot; надо менять. Как...

Динамическое выделение памяти под двумерный массив
Здравствуйте. Как мне правильно и грамотно (!) выделять память под двумерные массивы? Откуда...

Динамическое выделение памяти под двумерный массив
1) Ввести построчно элементы двумерного массива чисел. Количество столбцов задается. Количество...

Динамическое выделение памяти под массив int
плиз хелп Написать функцию getPrimes, которая принимает массив типа int и его размер. Функция...

Динамическое выделение памяти под двумерный массив
Нужно написать программу, динамически выделяем память под двумерный массив, функции ввода-вывода,...

5
MicM
825 / 484 / 324
Регистрация: 29.12.2009
Сообщений: 1,106
Завершенные тесты: 1
22.03.2014, 13:58 2
Цитата Сообщение от nicenice Посмотреть сообщение
Как реализовать динамическое выделение памяти под массив, к примеру размера n, при том, что значение этого n в процессе вычисления увеличится?
Удалять старый массив и выделять память под новый, уже другого размера.
0
gromo
377 / 276 / 30
Регистрация: 04.09.2009
Сообщений: 1,224
22.03.2014, 14:00 3
nicenice, когда начнет не хватать, выделяешь больший кусок памяти, копируешь туда все из старой памяти, и освобождай старую память. Так (упрощенно) работают стандартные контейнеры vector, map, deque, ...
И еще не забываем о placement new.
0
nicenice
3 / 3 / 2
Регистрация: 22.11.2011
Сообщений: 168
22.03.2014, 14:01  [ТС] 4
MicM, я это понимаю, но КАК это сделать? Вот, например, в приведенном мною коде.
gromo, ок, продемонстрировать это в моем примере?
0
mustimur
318 / 225 / 72
Регистрация: 22.11.2013
Сообщений: 856
Записей в блоге: 1
22.03.2014, 14:10 5
Вариант еще есть, malloc/free..А переопределение с помощью realloc
0
MicM
825 / 484 / 324
Регистрация: 29.12.2009
Сообщений: 1,106
Завершенные тесты: 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;
        }
    }
}
0
22.03.2014, 14:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2014, 14:20

Динамическое выделение памяти под массив структур (new/delete)
Люди добрые, подскажите пожалуйста, где в моем коде закралась ошибка? Интернет перечитал, во всех...

Динамическое выделение памяти под объекты
Создать класс с именем TRAIN, содержащий следующие закрытые поля: • название пункта назначения;...

Динамическое выделение памяти под структуру
#include &lt;iostream&gt; using namespace std; struct person { char*name; char *adres; int age; };...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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