129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
1

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Ситуация следующая: в функции используется стек. В конце из нее возвращается первый элемент. После же этого данные теряются. Так понимаю, это происходит из-за того, что стек в данном случае локальный. Проблема "решается" вынесением стека в глобальную область. Но ведь это "костыль". Не пойму, как решить проблему правильно. Для более точного объяснения код:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2019, 00:01
Ответы с готовыми решениями:

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

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

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

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

6
6091 / 3449 / 1402
Регистрация: 07.02.2019
Сообщений: 8,768
19.12.2019, 00:33 2
C++
1
static stack<Node> s;
Добавлено через 1 минуту
или если стек больше не нужен, то возвращать не указатель, а объект по значению
1
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
19.12.2019, 01:12 3
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
В конце из нее возвращается первый элемент.
Нет, у вас в коде не возвращается первый элемент. У вас возвращается указатель на первый элемент.

Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
Не пойму, как решить проблему правильно.
Возвращать именно первый элемент, а не указатель на него.
1
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
19.12.2019, 02:31  [ТС] 4
TheCalligrapher, что делать в данном случае, если стек внутри после отработки функции не нужен, а возвращать нужно все равно указатель?)
0
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
19.12.2019, 13:47  [ТС] 5
Актуально
0
6091 / 3449 / 1402
Регистрация: 07.02.2019
Сообщений: 8,768
19.12.2019, 13:59 6
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
а возвращать нужно все равно указатель?
Интересно, а чем это обосновано? Можно и указатель, если самому аллоцировать нужный объект в куче, только это нарушает идиому RAII
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
19.12.2019, 15:03 7
Цитата Сообщение от 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
19.12.2019, 15:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2019, 15:03
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru