![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Как вернуть массив из функции?
Только поподробнее плиз. Для примера предлагаю рассмотреть массив char massiv[12][12]; |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
В твоем случае, необходимо создать другой массив, выделить память на куче (malloc или HeapAlloc), скопировать туда массив и передать ссылку на него, ибо временные обьекты уничтожаются после завершения функции.. --------------------
|
||||
|
|||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
так сложно? |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Да, тогда всё ок Это сообщение отредактировал(а) chipset - 13.1.2005, 03:29 --------------------
|
||||
|
|||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
А! массив из функции. Я понял массив из функций
Ну указатель верни
Еще можно сделать массив глобальным так:
|
||||
|
|||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
ИМХО, удалится после выхода из функции.. --------------------
|
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Ага, щас!
С чего бы? Мы вызвали new, а где delete? более тог, если после вызова функции мы не удалим массив, будет leak. |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Меня наверное глючит, но обьекты созданные на стеке удаляются при выходе из функции.. --------------------
|
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
chipset,Так ведь на стеке только указатель - число=адрес массива в памяти.
Сам массив пришёл из new. |
|||
|
||||
| Adil' |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
Добавлено @ 13:36 Иногда передают в функцию адрес указателя, т.е. указатель на указатель:
-------------------- Удачи |
||||
|
|||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Я сначала подумал так же, как chipset. Действительно, delete же отсутствует. А чтобы каждый раз после вызова функции не создавался массив, нужно указатель пометить как static. Тогда он будет инициализироваться один раз. Соответственно new будет вызвано 1 раз. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| Doc_d0s |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 15.12.2004 Где: в кресле Репутация: 2 Всего: 3 |
Сделай массив статическим тогда он не сотрется в памяти после завершения работы ф-ии и верни указатель на него
--------------------
Админ- это вождь Apache'й :) |
|||
|
||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Вай, вай! Не хотел я такой пример давать
Ну раз уж слово сказано... Этот код будет красивше через ссылку.
|
||||
|
|||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Плохим тоном вообще считается выделение памяти в одном месте а удаление в другом. Если функция только выделяет память, то очень велик шанс, что эта память так и останется не удаленной. Если так делать, то лучше использовать умные указатели. -------------------- Волны гасят ветер... |
|||
|
||||
| Adil' |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
Ну да, а в M$ одни недоумки сидят - они ведь почему-то часто так делают
-------------------- Удачи |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |