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

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

Войти
Регистрация
Восстановить пароль
 
kirill1771
7 / 7 / 1
Регистрация: 02.11.2013
Сообщений: 25
#1

Задачи про динамическую память - C++

26.01.2014, 17:49. Просмотров 502. Ответов 10
Метки нет (Все метки)

Сегодня попалась такая задача:
ременной p хранится адрес динамически выделенной памяти, являющейся массивом из 5 чисел типа int.
Но этой памяти оказалось недостаточно. Выделите память для хранения ЕЩЕ 10 целых чисел в том же динамическом массиве и сохраните указатель на нее в p так, чтобы в нем остались старые 5 чисел.
Вводить и объявлять переменные не нужно, функцию main реализовывать не нужно,
решение - одна строчка с присваиванием.

C++
1
2
3
4
5
6
7
int * p;
    // тут выделили память в первый раз
    for(i=0; i<5; i++)
        scanf("%d", &p[i]);
    // ТРЕБУЕМЫЙ КОД
    for(i=5; i<15; i++)
        scanf("%d", &p[i]);
Я не могу решить (с памятью у меня проблемы))
Ваши предложения...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 17:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задачи про динамическую память (C++):

Вопрос про динамическую память - C++
Проясните, пожалуйста, кто в курсе, а то как-то ничего вразумительного не нашёл... Если не закрыть открытый файл, при нормальном завершении...

Предложения в динамическую память - C++
Как занести в динамическую память введеные с клавиатуры предложения, вводить до тех пор, пока не будет введено предложение, в котором будет...

Зачем использовать динамическую память? - C++
Прошу в двух словах разъяснить зачем используют динамическую память на практике. Заранее всем добрым людям спс!

Задание на Указатели и Динамическую память - C++
Добрый день подскажите как решить задачку: Написать функцию, которая находит минимальный и максимальный из размещенного в куче массива...

Как применить динамическую память? - C++
Помогите пожайлуста!!!!! Как в слейдущей программе применить динамическую память????? #include &lt;stdio.h&gt; #include&lt;conio.h&gt; #define N...

Задание на указатели и динамическую память - C++
Необходимо написать функцию numberstring( ) для подсчета числа строк в тексте. Напечатать это число. Писать нужно на языки Си, не Си++)...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
26.01.2014, 18:01 #2
смотри в сторону сишного realloc
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
26.01.2014, 18:04 #3
kirill1771,
C++
1
2
3
int * a = new int [5];//выделили память для пятнадцати элементов типа int
....
a = new(a) int [20];//довыделили память для еще 15 элементов по тому же указателю, что и был
после таких действий элементы, которые были в массиве, там же и останутся. вот правда не знаю что будет, если не хватит места на новую память в том же месте оперативной памяти
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
26.01.2014, 18:19 #4
Цитата Сообщение от metaluga145 Посмотреть сообщение
что будет, если не хватит места на новую память в том же месте оперативной памяти
исключение std::bad_alloc
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
26.01.2014, 18:21 #5
Кудаив, а оно само по себе не перенесет в другую область памяти с дальнейшим копированием?
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
26.01.2014, 18:23 #6
нет, если оно не будет перехвачено, то вызовется terminate и программа аварийно завершится
kirill1771
7 / 7 / 1
Регистрация: 02.11.2013
Сообщений: 25
26.01.2014, 21:53  [ТС] #7
Добавлено через 1 минуту
спасибо, но фишка в том, чтобы ответ был в одну строчку (как в условии)

Добавлено через 51 секунду
Цитата Сообщение от metaluga145 Посмотреть сообщение
kirill1771,
C++
1
2
3
int * a = new int [5];//выделили память для пятнадцати элементов типа int
....
a = new(a) int [20];//довыделили память для еще 15 элементов по тому же указателю, что и был
после таких действий элементы, которые были в массиве, там же и останутся. вот правда не знаю что будет, если не хватит места на новую память в том же месте оперативной памяти
спасибо, я тоже что-то вроде этого предполагал, но фишка в том, что решение должно быть в одну строчку (как в условии).
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
26.01.2014, 23:53 #8
Цитата Сообщение от kirill1771 Посмотреть сообщение
решение должно быть в одну строчку
как я понял 2 строки. там два комментария. выделение памяти, вместо первого комментария, не входит в решение, скорее всего.
Совсем в одну строку это сделать нельзя. Для того, чтобы довыделить, надо сначала выделить
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 11:23 #9
Цитата Сообщение от metaluga145 Посмотреть сообщение
C++
1
2
3
int * a = new int [5];//выделили память для пятнадцати элементов типа int 
.... 
a = new(a) int [20];//довыделили память для еще 15 элементов по тому же указателю, что и был
Это не так. Никакого довыделения тут не будет.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
26.02.2014, 15:54 #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Это не так. Никакого довыделения тут не будет.
уже прочитал, что довыделить с помощью new нельзя. а что тогда толком делает
Цитата Сообщение от metaluga145 Посмотреть сообщение
a = new(a) int [20];
???
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 16:04 #11
Цитата Сообщение от metaluga145 Посмотреть сообщение
а что тогда толком делает
Размещает (но не выделяет память) 20 интов со стартового адреса a.
Причем так как после размерности не указаны круглые скобки, инициализации (т.е. установки в 0 в данном случае) тоже не происходит.
Получается, что для int'а это вообще "пустая" операция.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 16:04
Привет! Вот еще темы с ответами:

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

Считать BMP изображение в динамическую память - C++
Нужно считать ВМР изображение в массив в динамической памяти используя fstream.

Создать массив размера n+1, не используя динамическую память - C++
Часто встречающийся вопрос,но я не могу найти на него ответ,потому что не могу коротко сформулировать. Вот считываю из файла число n.Мне...

Как реализовать ввод с клавиатуры в динамическую память? - C++
Я написал код программы, нахождение корней квадратного уравнения, где a, b, c находятся в динамической памяти. Вопрос, как записать...


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

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

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