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

Сообщение: address of local variable * returned - C++

Восстановить пароль Регистрация
 
Pingvin001
 Аватар для Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 54
28.05.2014, 15:33     Сообщение: address of local variable * returned #1
В интернете много поисков ответа, например: [cut] и [cut] , но правильного нет.
Такое сообщение возникает в любом С, где используется переменная, когда её создавшая функция уже закрыта (переменная должна исчезнуть). Самый естественный способ борьбы, это деланье переменную статичной, что бы она существовала от первого вызова функции до окончания основной программы.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 15:33     Сообщение: address of local variable * returned
Посмотрите здесь:

C++ Не работает программа (Process returned o)
C++ Ошибка: ld returned 1 exit status
C++ Инициализация в с++. Предупреждение C4700: uninitialized local variable 'name' used
Id returned 1 exit status? C++
Id returned 1 exit status C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.05.2014, 15:48     Сообщение: address of local variable * returned #2
Pingvin001, В чем вопрос? Самый простой способ не возвращать адрес локальной переменной.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.05.2014, 15:55     Сообщение: address of local variable * returned #3
Успокойтесь, сделайте глубокий вдох и повторите вопрос по-русски, желательно с примерами кода.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
28.05.2014, 17:22     Сообщение: address of local variable * returned #4
Да ему даже без вопроса ответили:
Цитата Сообщение от ForEveR Посмотреть сообщение
Самый простой способ не возвращать адрес локальной переменной
Pingvin001
 Аватар для Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 54
28.05.2014, 17:57  [ТС]     Сообщение: address of local variable * returned #5
ForEveR>В чем вопрос?
Вопроса собственно нет.
Топик результат поиска в интернете и раздумий.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
28.05.2014, 18:00     Сообщение: address of local variable * returned #6
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Вопроса собственно нет.
тогда в чем смысл темы?
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Топик результат поиска в интернете и раздумий.
эммм... каких?
Pingvin001
 Аватар для Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 54
28.05.2014, 18:20  [ТС]     Сообщение: address of local variable * returned #7
Croessmah > тогда в чем смысл темы?
Как я выяснил предупреждение довольно частое, а правильного ответа нет, может кому-то и поможет.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
28.05.2014, 18:22     Сообщение: address of local variable * returned #8
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Как я выяснил предупреждение довольно частое
ни разу не было
Цитата Сообщение от Pingvin001 Посмотреть сообщение
а правильного ответа нет
вот:
Цитата Сообщение от ForEveR Посмотреть сообщение
Самый простой способ не возвращать адрес локальной переменной.
и в учебниках об этом говорится и в статьях, да и здравый смысл подсказывает.
Pingvin001
 Аватар для Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 54
28.05.2014, 19:29  [ТС]     Сообщение: address of local variable * returned #9
Croessmah > ни разу не было
По запросу в любимом поисковике двух фраз "C++" "address of local variable * returned" найдётся результатов более тысячи.

Croessmah > Самый простой способ не возвращать адрес локальной переменной
Но нужно значение локальной переменной и самый простой способ её получить - это объявить статической.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
28.05.2014, 19:43     Сообщение: address of local variable * returned #10
Цитата Сообщение от Pingvin001 Посмотреть сообщение
По запросу в любимом поисковике двух фраз "C++" "address of local variable * returned" найдётся результатов более тысячи.
ввел в гугле "оаооао", получил "Результатов: примерно 181 000 000". Если кто-то не в состоянии понять что не надо так делать, то это их проблемы
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Но нужно значение локальной переменной и самый простой способ её получить - это объявить статической.
нафига знать то, что более не пригодится и будет уничтожено?
Pingvin001
 Аватар для Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 54
28.05.2014, 20:00  [ТС]     Сообщение: address of local variable * returned #11
Croessmah > 1
Я привел конкретный пример поисковой фразы.

Croessmah > нафига знать то, что более не пригодится и будет уничтожено?
Только это надо вывести.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
28.05.2014, 20:07     Сообщение: address of local variable * returned #12
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Только это надо вывести.
и нафига тогда возвращать адрес локальной переменной? Кроме ошибок это ничего не даст. Что касается static переменной, то она уже не будет automatic storage duration, она будет static storage duration и следующий вызов функции может запросто перезаписать сие чудо и тогда адрес то будет тот же, а вот значение уже другое.
Pingvin001
 Аватар для Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 54
28.05.2014, 22:07  [ТС]     Сообщение: address of local variable * returned #13
Croessmah, как сей пример сделать работоспособным, без использования статической (и глобальной) переменной?
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
char *funk(void);
int main(void)  {
    cout << funk();
return 0;
                }
char *funk()    {
static char perem[]="Привет";
return perem;
                }
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
28.05.2014, 22:43     Сообщение: address of local variable * returned #14
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Для начала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
#include <cstring>
 
//Возврат объекта, который сам позаботится о корректном копировании/перемещении
std::string foo1()
{
   return "Привет" ;
}
 
//Передаем в функцию буффер, которого достаточно для копирования в него выходных данных
size_t foo2 ( char * buffer )
{
   const char * str = "Привет" ;
   if ( buffer == NULL )
      return strlen(str) + 1 ;
   strcpy ( buffer , str ) ;
   return 0 ;
}
 
//Выделяем память внутри функции и возвращаем указатель на выделенную в куче память. Клиентам необходимо самостоятельно освободить её
char * foo3 ()
{
   const char * str = "Привет" ;
   char * buffer = new char [ strlen(str) + 1 ] ;
   strcpy ( buffer , str ) ;
   return buffer ;
}
 
 
int main()
{
   std::cout << foo1() << std::endl ;
 
   size_t size = foo2( NULL ) ;
   char * str = new char [ size ] ;
   foo2( str ) ;
   std::cout << str << std::endl ;
   delete [] str ;
 
   std::cout << ( str = foo3() ) << std::endl ;
   delete [] str ;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2014, 12:37     Сообщение: address of local variable * returned
Еще ссылки по теме:

C++ C++ - ld returned 1 exit status
Id returned 1 exit status C++
C++ Внутри switch ошибка Case bypasses initialization of a local variable

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

Или воспользуйтесь поиском по форуму:
Pingvin001
 Аватар для Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 54
29.05.2014, 12:37  [ТС]     Сообщение: address of local variable * returned #15
Спасибо Croessmah, аж три варианта, разбираюсь.
Yandex
Объявления
29.05.2014, 12:37     Сообщение: address of local variable * returned
Ответ Создать тему
Опции темы

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