Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/75: Рейтинг темы: голосов - 75, средняя оценка - 4.89
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1

Возврат ссылки на локальную переменную

09.08.2015, 09:59. Показов 14536. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int*& change(void)
{
    int* x(new int(50));
    return x;
}
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int* y(change());
    cout << *y << endl;
    system("pause");
    return 0;
}
Объясните, почему выводится корректное значение, ведь локальный указатель должен был удалиться на выходе из функции.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.08.2015, 09:59
Ответы с готовыми решениями:

Возвращение ссылки на локальную переменную
Заметил недавно одну интересную вещь. Как вообще работает такой код? Причем коректно. int&amp; func(); int main() { cout &lt;&lt;...

Указатель на локальную переменную
Добрый день, Помогите пожалуйста разобраться с Указателями. Есть запись и к ней есть ссылочный тип, пример: type PRecValue =...

Последний ID в локальную переменную
Подскажите, пожалуйста, аналог кода для PG. На MSSQL работает так: declare @unit_id int; insert into unit (info) values ('unit...

43
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,361
09.08.2015, 19:19
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Объясните, почему выводится корректное значение, ведь локальный указатель должен был удалиться на выходе из функции.
Ну а если взять такой код.
C++
1
2
3
4
5
int f(int x)
{
    int res=x*2;
    return res;//Все нормально же, будет скопировано значение из res(хоть и переменная потом уничтожится), с указателями также
}
Добавлено через 2 минуты
Т.е возвращается как-бы копия того указателя.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
09.08.2015, 19:21  [ТС]
Новичок, ну так у тебя происходит возврат из ф-ции по значению, а у меня по ссылке
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,361
09.08.2015, 19:28
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
int*& change(void)
Да, действительно. Как-то не заметил этот символ &...
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.08.2015, 21:30
Ferrari F1,
локальный объект действительно дохнет,
возвращаемая ссылка ссылается на "дохлый" объект.

но память, которая была отведена под этот объект,
не всегда сразу же протухает.

она может содержать данные погибшего объекта до тех пор,
пока нечто не перетрет её.

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Это компилятором определяется?
зависит от того как сойдутся звезды на небе,
от особенностей стека,
и да - от того, что за код сгенерировал компилятор.


короче, на память мертвого объекта нельзя закладываться.
если она не успела протухнуть - считайте, что это чистое везение.
(ну или невезенье, потому что маскирует ошибки, кому как)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2015, 21:30

Из ассемблерной вставки в локальную переменную
Нужно из ассемблерной вставки передать содержимое стека st(0) из указанного места в локальную переменную процедуры из которой запущена...

Перевести локальную переменную в глобальную
function am($a) { echo $a = str_ireplace('им. ', &quot;&quot;, $a); } есть функция, как мне использовать переменную $a в общем...

Как инициализировать локальную переменную?
Работаю над заданием. Нужно создать структуру &quot;Страна&quot;. Делаю все вроде правильно. Но есть одна проблема при компиляции у меня появляется...

VS2010 отладчик не видит локальную переменную
Добрый день! С чем это может быть связано?

Возвращение указателя на локальную переменную (массив)
Добрый день! Вопрос такой: Как правильно возвратить указатель на локальную переменную (или массив)? Программа ниже...


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

Или воспользуйтесь поиском по форуму:
44
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru