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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

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

28.09.2011, 17:57. Просмотров 2180. Ответов 24
Метки нет (Все метки)

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: возвращение адреса локальной или временной переменной

Так почему это работает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2011, 17:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как это работает? (C++):

Как это работает? Я хочу спросить как работает C++ и где можно про него почитать - C++
Привет, котоны. Заранее благодарю. Это будет моих общих вопросов нить, т.к. создавать целую ветку для каждого нецелесообразно. Я хочу...

Русификация.Работает-супер! Обьяснитте, как это работает? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; using namespace std; char* Rus(const char* text); int main () ...

Как это работает? - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; int main() { char* s=new char; ...

Как это работает - C++
Здравствуйте уважаемые форумчане!Как это работает? Как например предотвратить выход за приделы допустимых значений переменных!? ...

Как это работает? - C++
Читаю я кое какой &quot;учебник&quot;, и в нём появился такой вот кусок кода int input (tank&amp; t, char map) { char act; int ch; int e =...

Как это работает? - C++
Здравствуйте, можете, пожалуйста, поэтапно объяснить как работает приведенный ниже фрагмент кода? Что такое floor, return, ceil? double...

24
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
28.09.2011, 18:43 #16
стек это отдельная страница памяти, которая выделяется при запуске программы.
регистр esp указывает на вершину стека.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
28.09.2011, 18:44  [ТС] #17
Ответ на мой вопрос в первом посте:
При уничтожении переменной, память освобождается от привязки, но не изменяется. С чужой памятью можно работать.( памятью, отведенной системы для программы)
0
OstapBender
583 / 522 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.09.2011, 18:46 #18
да UB тут и всё.
так вышло случайно.

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

Добавлено через 6 минут
Хотя, наверное все таки есть... Ну да ладно.
1
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.09.2011, 22:14 #25
DKOI, разумеется, отличия есть. Неопределённое поведение предполагает, что поведение может меняться от запуска к запуску даже на одном компиляторе, в отличие от недокументированной возможности, которая либо может быть воспроизведена по желанию пользователя, либо будет гарантированно проявляться всегда и с одним и тем же эффектом при равных условиях.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2011, 22:14
Привет! Вот еще темы с ответами:

Как это работает? - C++
Доброго времени суток. Граждане программисты, подскажите пожалуйста как работает данный кусок кода??? А точнее дружественные функции...

объясните как это работает - C++
#include &lt;iostream&gt; #include &lt;algorithm&gt; using namespace std; long func (long * arr, int length) { return...

Функция printf () как это работает - C++
Здраствуйте Ув. Форумчане. Прошу помочь разобраться с конкретным примером. #include &lt;iostream&gt; #include &lt;stdio.h&gt; float d = 1; ...

COORD position = {0,0}; - как это работает? - C++
Здравствуйте. Разбираю код двух программ: &quot;Сапер&quot; и &quot;Змейка&quot; и в каждой из них есть, вроде бы, функция COORD. То, что COORD position =...


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

Или воспользуйтесь поиском по форуму:
25
Yandex
Объявления
28.09.2011, 22:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru