| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Локальные переменные и освобождение памяти |
| Автор: GydruS 4.12.2010, 14:52 | ||
| Здравствуйте, профессионалы! Правильно ли я понимаю, что в приведенном ниже коде после выполнения ф-ии testFunct() значение ее локальной переменной Result просто напросто остается в памяти, и поэтому обращение к тому же участку памяти выводит его значение на экран, но при этом эта памаять уже не является выделенной для переменной (т.к. ф-я отработала) и может быть переписана другой операцией в дальнейшем? Т.е. другими словами в данном примере возвращение значения "ABC" некорректно?
|
| Автор: Crafty 4.12.2010, 15:39 |
| GydruS, да всё верно. |
| Автор: toxx 5.12.2010, 00:27 | ||||
GydruS
нет, не правильно вы понимаете, это статический массив из 256 элементов типа int, который вы инициализируете только 4 числами, остальные по умолчанию инициализируются нулями.Другое дело было бы если у вас было
|
| Автор: Crafty 5.12.2010, 03:12 |
Если бы было ключевое слово static тогда это был бы статический массив, а так этот массив создается при каждом вызове ф-ции. GydruS, никогда не возвращай указатель на локальные переменные ф-ции. Тут посмотри похожий вопрос http://www.wasm.ru/forum/viewtopic.php?id=39407 |
| Автор: toxx 5.12.2010, 03:38 |
| Crafty статический я к тому, что память подчищать не нужно а то что из стэка возвращается указатель на массив, то это UB(первый раз не обратил внимания, мой косяк), то это да, так делать нельзя. |
| Автор: Crafty 5.12.2010, 03:50 |
да я тоже вначале не заметил, повнимательней посмотрел уже после твоего поста. |
| Автор: GydruS 5.12.2010, 18:54 |
| Crafty, toxx, Спасибо за разъяснения! Все понял! =) |
| Автор: boostcoder 5.12.2010, 19:43 |
тогда уж автоматический |
| Автор: toxx 5.12.2010, 20:59 |
| boostcoder автоматическая память это и есть память в стеке -_- |
| Автор: boostcoder 5.12.2010, 22:21 |
и? я с этим спорил? |
| Автор: toxx 5.12.2010, 23:57 | ||
тогда к чему дополнение ? |
| Автор: boostcoder 6.12.2010, 00:00 |
к тому, что когда говоришь что "память/объект/массив автоматический" - не возникает непоняток типа _статическая_память_/_статический_размер_/_переменная_с_квалификатором_static_ |
| Автор: toxx 6.12.2010, 00:22 | ||
т.е. из сhttp://forum.vingrad.ru/forum/topic-316837/kw-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C.html# строки поста не понятно какая память имелась ввиду? |
| Автор: Alexeis 6.12.2010, 01:20 |
| wchar_t Result[256] = {65,66,67,0}; По сути временная копия константного массива, время жизни которой ограничено вызовом функции. Кстати если ее переоформить (переменную Result) как указатель на константную память, то код будет корректным, поскольку константы имеют неограниченное время жизни. |
| Автор: toxx 6.12.2010, 02:00 | ||
это вам так кажется, тут я это слово использовал никак не относящееся к языку программирования, а так как оно есть в словаре(константа, не меняется). |
| Автор: mes 6.12.2010, 02:07 | ||
не совсем так.. Вы сказали массив действительно статический, но не потому что память подчищать не нужно ( он может располагаться в любой памяти статической, автоматической или куче), а потому, что размер свой менять не может.. |
| Автор: xvr 6.12.2010, 12:53 | ||||
В словаре много чего есть. Ну например -
|
| Автор: toxx 6.12.2010, 15:47 |
| mes,xvr У нас массивы ни на кого не нападали все сдаюсь |