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

Как это работает? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
28.09.2011, 17:57     Как это работает? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
int *fun()
{
    int a = 5;
    return &a;
}
int main()
{
        int *ptr = fun();
        std::cout << *ptr;
        system( "pause" );
        return 0;
}
Как я это себе представляю: функция fun возвращает адрес автоматической переменной. Но эта переменная при завершении работы функции fun уничтожается, поэтому указатель ptr указывает на недействительную память.
Даже компилятор выдает это :warning C4172: возвращение адреса локальной или временной переменной

Так почему это работает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2011, 17:57     Как это работает?
Посмотрите здесь:

C++ Как это работает
C++ объясните как это работает
C++ Как это работает?
Как это работает? C++
Русификация.Работает-супер! Обьяснитте, как это работает? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
28.09.2011, 18:49  [ТС]     Как это работает? #21
Я думаю, что все сказанное про стэк - это лишнее, ибо только запутываете. В ответе на мой вопрос, который в итоге получился, никакого стэка не присутствует.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DKOI
 Аватар для DKOI
24 / 24 / 1
Регистрация: 08.09.2010
Сообщений: 136
28.09.2011, 18:51     Как это работает? #22
Цитата Сообщение от Chelioss Посмотреть сообщение
Я думаю, что все сказанное про стэк - это лишнее, ибо только запутываете. В ответе на мой вопрос, который в итоге получился, никакого стэка не присутствует.
Действительно, это может путать. Но суть вы поняли верно. Память уже "освобождена", но ещё не задействована снова. А где и как она хранится, не особо в данном случае важно.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.09.2011, 19:47     Как это работает? #23
Цитата Сообщение от DKOI Посмотреть сообщение
Недокументированная особенность.
Неопределённое поведение, вообще-то.
DKOI
 Аватар для DKOI
24 / 24 / 1
Регистрация: 08.09.2010
Сообщений: 136
28.09.2011, 20:59     Как это работает? #24
Цитата Сообщение от silent_1991 Посмотреть сообщение
Неопределённое поведение, вообще-то.
Дословный перевод и вольный смысловой перевод. Сути дела не меняет. ИМХО. Если же тут есть какие-то смысловые отличия, то прошу разъяснить.

Добавлено через 6 минут
Хотя, наверное все таки есть... Ну да ладно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2011, 22:14     Как это работает?
Еще ссылки по теме:

C++ Как это работает?
C++ Как это работает?
Как это работает? Я хочу спросить как работает C++ и где можно про него почитать C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.09.2011, 22:14     Как это работает? #25
DKOI, разумеется, отличия есть. Неопределённое поведение предполагает, что поведение может меняться от запуска к запуску даже на одном компиляторе, в отличие от недокументированной возможности, которая либо может быть воспроизведена по желанию пользователя, либо будет гарантированно проявляться всегда и с одним и тем же эффектом при равных условиях.
Yandex
Объявления
28.09.2011, 22:14     Как это работает?
Ответ Создать тему
Опции темы

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