Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651

Возвращение результата из функции

19.12.2019, 00:01. Показов 850. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Ситуация следующая: в функции используется стек. В конце из нее возвращается первый элемент. После же этого данные теряются. Так понимаю, это происходит из-за того, что стек в данном случае локальный. Проблема "решается" вынесением стека в глобальную область. Но ведь это "костыль". Не пойму, как решить проблему правильно. Для более точного объяснения код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Node {}
 
Node* f()
{
    stack<Node> s;
    ...
    
    Node* to_return = &s.top();
    return to_return;//здесь данные, разумеется, еще есть
}
 
...
 
Node* n = f();//здесь уже "теряются"
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2019, 00:01
Ответы с готовыми решениями:

Возвращение результата функции bool и использование его в функции main()
У меня есть функция bool, которая имеет вид: bool Pisos(int row, int place) { if (...) return true; else return false;...

Возвращение массива в качестве результата выполнения метода класса (Kubuntu, netBeans, g++)
Всем привет. Пытаюсь написать свой первый демон на C++ по образу и подобию сделанного на PHP. Столкнулся со следующей проблемой. ...

Возвращение строки из функции
Не могу разобраться, почему возвращает кракозябру. Помогите пожалуйста найти ошибку. #include &quot;stdafx.h&quot; #include...

6
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
19.12.2019, 00:33
C++
1
static stack<Node> s;
Добавлено через 1 минуту
или если стек больше не нужен, то возвращать не указатель, а объект по значению
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
19.12.2019, 01:12
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
В конце из нее возвращается первый элемент.
Нет, у вас в коде не возвращается первый элемент. У вас возвращается указатель на первый элемент.

Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
Не пойму, как решить проблему правильно.
Возвращать именно первый элемент, а не указатель на него.
1
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
19.12.2019, 02:31  [ТС]
TheCalligrapher, что делать в данном случае, если стек внутри после отработки функции не нужен, а возвращать нужно все равно указатель?)
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
19.12.2019, 13:47  [ТС]
Актуально
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
19.12.2019, 13:59
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
а возвращать нужно все равно указатель?
Интересно, а чем это обосновано? Можно и указатель, если самому аллоцировать нужный объект в куче, только это нарушает идиому RAII
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
19.12.2019, 15:03
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
что делать в данном случае, если стек внутри после отработки функции не нужен, а возвращать нужно все равно указатель?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Node f()
{
    stack<Node> s;
    ...
 
    return s.top();
}
 
int main()
{
    Node node = f();
    Node *pNode = &node;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.12.2019, 15:03
Помогаю со студенческими работами здесь

Возвращение константы из функции
Привет всем, Стало интересно где же все таки это применяется. const int myFoo() В каких ситуациях можно применить эту конструкцию? ...

Возвращение массива из функции
Нужно вернуть массив типа int из функции Как я понимаю сделать это можно только с помощью указателей У меня это получилось но так...

Возвращение функции, ifstream
Здравствуйте. Вывел открытие файла в функцию. А как мне вернуть значение/указатель? void CreateDictionary(char *file_name) { ...

Возвращение ссылки из функции
Привет, я немного не понимаю, почему в следующем коде в строках 16-17 надо возвращать именно ссылку: #include &lt;iostream&gt; ...

Возвращение значения функции
Подскажите, что означает эта запись, что она возвращает понять не могу. static FUnknown* createInstance (void* context) { ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru