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

Динамический массив - C++

Восстановить пароль Регистрация
 
hamin
150 / 131 / 65
Регистрация: 21.11.2012
Сообщений: 542
04.05.2013, 16:08     Динамический массив #1
есть примерно такая функция:

C++
1
2
3
4
5
6
7
8
9
10
int *funktion (int size){
 
int *g = new int [size];
 
 
... //функция работы с дин. массивом
 
 
return g;
}
таким образом я возвращаю из функции динамический массив. все данные этого массива присваиваются далее в программе другому массиву. Так вот, подскажите пожалуйста как мне освободить память для дин. массива, созданного в функции.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2013, 16:08     Динамический массив
Посмотрите здесь:

C++ статический массив ----> динамический массив
динамический массив C++
Динамический массив C++
Динамический массив C++
C++ Динамический массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Василицк
0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 18
04.05.2013, 16:10     Динамический массив #2
delete [] g;
если не ошибаюсь
hamin
150 / 131 / 65
Регистрация: 21.11.2012
Сообщений: 542
04.05.2013, 16:19  [ТС]     Динамический массив #3
ну да, только где его писать?
Василицк
0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 18
04.05.2013, 16:21     Динамический массив #4
там где заканчиваешь работать с массивом, я обычно пишу в конце

C++
1
2
3
4
5
6
7
delete [] a;
delete [] q;
 
system ("pause");
 
return 0;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
04.05.2013, 16:26     Динамический массив #5
Цитата Сообщение от hamin Посмотреть сообщение
ну да, только где его писать?
Там, где станет ясно, что данная память более не понадобится.

А вообще, возвращать буфера наружу не есть хорошо.
hamin
150 / 131 / 65
Регистрация: 21.11.2012
Сообщений: 542
04.05.2013, 16:28  [ТС]     Динамический массив #6
ну так если я возвращаю массив из функции программа его не увидит с именем g,
к примеру:

C++
1
2
3
4
5
6
7
8
9
10
main () {
size = 10;
int *h = new int [size];
 
h = funktion (size);
 
delete [] h; 
 
return 0;
}
как теперь освободить память массива, созданного в функции?? если напишу delete [] g; выдаст ошибку, так как область видимости массива в пределах функции
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2013, 16:31     Динамический массив
Еще ссылки по теме:

C++ Динамический массив
Динамический массив C++
C++ Динамический массив

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
04.05.2013, 16:31     Динамический массив #7
У Вас же написано:
Цитата Сообщение от hamin Посмотреть сообщение
C++
1
delete [] h;
Оператору delete[] важен адрес начала выделенной памяти, а не имя переменной.

Добавлено через 36 секунд
Только тут у Вас утечка.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
main () {
size = 10;
int *h = new int [size];//Выделили память
//Здесь нужен delete [] h;
h = funktion (size);//Перезаписали указатель, теперь у нас нигде нет адреса выделенной до этого памяти - утечка
 
delete [] h;//Удаляем h. Первое же выделение так и остается висеть. 
 
return 0;
}
Yandex
Объявления
04.05.2013, 16:31     Динамический массив
Ответ Создать тему
Опции темы

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