![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GydruS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 1.10.2010 Репутация: нет Всего: нет |
Здравствуйте, профессионалы!
Правильно ли я понимаю, что в приведенном ниже коде после выполнения ф-ии testFunct() значение ее локальной переменной Result просто напросто остается в памяти, и поэтому обращение к тому же участку памяти выводит его значение на экран, но при этом эта памаять уже не является выделенной для переменной (т.к. ф-я отработала) и может быть переписана другой операцией в дальнейшем? Т.е. другими словами в данном примере возвращение значения "ABC" некорректно?
|
|||
|
||||
| Crafty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 3.11.2008 Репутация: 2 Всего: 14 |
GydruS, да всё верно.
|
|||
|
||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 2 Всего: 13 |
GydruS
нет, не правильно вы понимаете, это статический массив из 256 элементов типа int, который вы инициализируете только 4 числами, остальные по умолчанию инициализируются нулями.Другое дело было бы если у вас было
|
||||
|
|||||
| Crafty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 3.11.2008 Репутация: 2 Всего: 14 |
Если бы было ключевое слово static тогда это был бы статический массив, а так этот массив создается при каждом вызове ф-ции. GydruS, никогда не возвращай указатель на локальные переменные ф-ции. Тут посмотри похожий вопрос http://www.wasm.ru/forum/viewtopic.php?id=39407 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 2 Всего: 13 |
Crafty
статический я к тому, что память подчищать не нужно а то что из стэка возвращается указатель на массив, то это UB(первый раз не обратил внимания, мой косяк), то это да, так делать нельзя. |
|||
|
||||
| Crafty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 3.11.2008 Репутация: 2 Всего: 14 |
||||
|
||||
| GydruS |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 1.10.2010 Репутация: нет Всего: нет |
Crafty, toxx, Спасибо за разъяснения! Все понял! =)
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
тогда уж автоматический |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 2 Всего: 13 |
boostcoder
автоматическая память это и есть память в стеке -_- |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 2 Всего: 13 |
тогда к чему дополнение ? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
к тому, что когда говоришь что "память/объект/массив автоматический" - не возникает непоняток типа _статическая_память_/_статический_размер_/_переменная_с_квалификатором_static_ |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 2 Всего: 13 |
т.е. из следующей строки поста не понятно какая память имелась ввиду? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
wchar_t Result[256] = {65,66,67,0};
По сути временная копия константного массива, время жизни которой ограничено вызовом функции. Кстати если ее переоформить (переменную Result) как указатель на константную память, то код будет корректным, поскольку константы имеют неограниченное время жизни. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |