1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 23
|
|||||||||||
1 | |||||||||||
Динамическое выделение памяти22.10.2016, 07:53. Показов 1855. Ответов 16
Метки нет (Все метки)
Добрый день!
пытаюсь освоить С++ и дошёл до раздела динамического выделения памяти. Беру пример с сайта cppstudio.com всё работает
0
|
22.10.2016, 07:53 | |
Ответы с готовыми решениями:
16
Распределение памяти. Динамическое выделение памяти Динамическое выделение памяти Динамическое выделение памяти Динамическое выделение памяти |
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,683
|
|
22.10.2016, 07:57 | 2 |
Выделяешь 1 элемент, а обращаешься к двум. Как так?
1
|
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 23
|
|
22.10.2016, 08:14 [ТС] | 3 |
nmcf, не соглашусь! Почему один ? Выделяю два [0], [1]. Если закомментить функцию delete, то код компилируется и выполняется без ошибок
0
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,524
|
||||||
22.10.2016, 08:19 | 4 | |||||
выделяешь ОДИН!!!
число в квадратных скобках означает количество, равносильно
разумеется, контроль памяти не срабатывает ошибка как была так и осталась, просто замаскировалась в более серьезных проектах выстрелит в любой момент
0
|
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 23
|
|
22.10.2016, 08:23 [ТС] | 5 |
Мммм, странно...в учебниках про это не пишут и я наивно полагал, что объектов два. То есть, если я заменю 1 на 2 то всё будет работать?
0
|
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 23
|
|
22.10.2016, 15:14 [ТС] | 7 |
Спасибо Вам за совет! Попробую!
Добавлено через 5 часов 51 минуту ValeryS, попробовал заменить 1 на 2...ничего не изменилось
0
|
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,683
|
|
22.10.2016, 15:21 | 8 |
0
|
11 / 11 / 7
Регистрация: 15.10.2012
Сообщений: 83
|
||||||
22.10.2016, 15:24 | 9 | |||||
0
|
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
|
|||||||||||
22.10.2016, 15:41 | 10 | ||||||||||
Ошибка в инкременте указателя в цикле. После выхода из цикла, "р" указывает на другой участок памяти, а не тот, который был ему выделен оператором "new". Соответственно delete пытается освобождать другой кусок памяти. Раз уж хотите именно так выводить, то правильно будет так:
0
|
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 23
|
|
22.10.2016, 15:50 [ТС] | 11 |
Хм...спасибо, буду пробовать! Что-то пока четкого понимания этого механизма не складывается
1
|
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,683
|
||||||
22.10.2016, 15:50 | 12 | |||||
Можно ещё после цикла:
0
|
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 23
|
|
22.10.2016, 16:38 [ТС] | 13 |
nmcf, то есть вернуться к нулевому индексу?
Вроде все просто, но как запутанно
0
|
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,683
|
|
22.10.2016, 17:42 | 15 |
Сообщение было отмечено Viktor_Repin как решение
Решение
Viktor_Repin, что запутано? Адрес должен быть тот, который выдан new.
1
|
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 23
|
|
23.10.2016, 19:02 [ТС] | 16 |
nmcf, точно! попробовал осуществить возврат к первоначальному индексу и всё заработало! попробую ещё попрактиковаться, чтобы окончательно освоить. Спасибо огромное за советы - очень помогает, когда есть сообщество помогающее новичкам преодолеть трудности освоения.
еще раз спасибо! PS жаль, что компилятор не выявляет таких проблем... Добавлено через 18 минут учитывая, что код может быть весьма большим и не всегда есть возможность отследить когда был изменен индекс, есть ли способ автоматического возврата индекса к первоначальному?
0
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,524
|
|
23.10.2016, 19:07 | 17 |
есть и он заключается в неизменении указателя который вернул new
для работы используются копии как и показал Selot,
0
|
23.10.2016, 19:07 | |
23.10.2016, 19:07 | |
Помогаю со студенческими работами здесь
17
Динамическое выделение памяти new Динамическое выделение памяти Динамическое выделение памяти Динамическое выделение памяти Динамическое выделение памяти Динамическое выделение памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |