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

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

Войти
Регистрация
Восстановить пароль
 
Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 132
#1

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

28.05.2014, 15:33. Просмотров 945. Ответов 14
Метки нет (Все метки)

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

Предупреждение: returning address of local variable or temporary - C++
Есть код программы для кодирования в base64 и обратно, не самый лучший код, но все же. И вот выскакивает два предупреждения на 2 return в...

Ошибка С4700 uninitialized local variable e used - C++
csc

Инициализация в с++. Предупреждение C4700: uninitialized local variable 'name' used - C++
#include <cstdlib> #include <iostream> #include <string> using namespace std; class EX { public: EX (char*...

Внутри switch ошибка Case bypasses initialization of a local variable - C++
Компилятор не устраивает case 3, там ввод массива автоматически , в чем ошибка подскажите Ошибку пишет Case bypasses initialization of a...

Исправить ошибку For loop control variable must be simple local variable - Delphi
var q,s,n:integer; a:array of integer; i:integer; Form1: TForm1; implementation {$R *.dfm} procedure...

[Warning] Unit1.pas(132): For loop control variable must be simple local variable - Delphi
Помогите пожалуйста! что я не так делаю? ошибки: Unit1.pas(174): For loop control variable must be simple local variable ...

14
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
28.05.2014, 15:48 #2
Pingvin001, В чем вопрос? Самый простой способ не возвращать адрес локальной переменной.
0
Kuzia domovenok
2125 / 1955 / 194
Регистрация: 25.03.2012
Сообщений: 6,803
Записей в блоге: 1
28.05.2014, 15:55 #3
Успокойтесь, сделайте глубокий вдох и повторите вопрос по-русски, желательно с примерами кода.
0
monolit
188 / 187 / 22
Регистрация: 24.03.2011
Сообщений: 670
Завершенные тесты: 1
28.05.2014, 17:22 #4
Да ему даже без вопроса ответили:
Цитата Сообщение от ForEveR Посмотреть сообщение
Самый простой способ не возвращать адрес локальной переменной
0
Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 132
28.05.2014, 17:57  [ТС] #5
ForEveR>В чем вопрос?
Вопроса собственно нет.
Топик результат поиска в интернете и раздумий.
0
Croessmah
Ушел
13763 / 8013 / 922
Регистрация: 27.09.2012
Сообщений: 19,723
Записей в блоге: 3
Завершенные тесты: 1
28.05.2014, 18:00 #6
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Вопроса собственно нет.
тогда в чем смысл темы?
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Топик результат поиска в интернете и раздумий.
эммм... каких?
0
Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 132
28.05.2014, 18:20  [ТС] #7
Croessmah > тогда в чем смысл темы?
Как я выяснил предупреждение довольно частое, а правильного ответа нет, может кому-то и поможет.
0
Croessmah
Ушел
13763 / 8013 / 922
Регистрация: 27.09.2012
Сообщений: 19,723
Записей в блоге: 3
Завершенные тесты: 1
28.05.2014, 18:22 #8
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Как я выяснил предупреждение довольно частое
ни разу не было
Цитата Сообщение от Pingvin001 Посмотреть сообщение
а правильного ответа нет
вот:
Цитата Сообщение от ForEveR Посмотреть сообщение
Самый простой способ не возвращать адрес локальной переменной.
и в учебниках об этом говорится и в статьях, да и здравый смысл подсказывает.
0
Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 132
28.05.2014, 19:29  [ТС] #9
Croessmah > ни разу не было
По запросу в любимом поисковике двух фраз "C++" "address of local variable * returned" найдётся результатов более тысячи.

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

Croessmah > нафига знать то, что более не пригодится и будет уничтожено?
Только это надо вывести.
0
Croessmah
Ушел
13763 / 8013 / 922
Регистрация: 27.09.2012
Сообщений: 19,723
Записей в блоге: 3
Завершенные тесты: 1
28.05.2014, 20:07 #12
Цитата Сообщение от Pingvin001 Посмотреть сообщение
Только это надо вывести.
и нафига тогда возвращать адрес локальной переменной? Кроме ошибок это ничего не даст. Что касается static переменной, то она уже не будет automatic storage duration, она будет static storage duration и следующий вызов функции может запросто перезаписать сие чудо и тогда адрес то будет тот же, а вот значение уже другое.
0
Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 132
28.05.2014, 22:07  [ТС] #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;
                }
0
Croessmah
Ушел
13763 / 8013 / 922
Регистрация: 27.09.2012
Сообщений: 19,723
Записей в блоге: 3
Завершенные тесты: 1
28.05.2014, 22:43 #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 ;
}
0
Pingvin001
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 132
29.05.2014, 12:37  [ТС] #15
Спасибо Croessmah, аж три варианта, разбираюсь.
0
29.05.2014, 12:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2014, 12:37
Привет! Вот еще темы с ответами:

Ошибка For loop control variable must be simple local variable - Delphi
Добра всем! Ошибка, указанная в топике темы, возникает в таком контексте: function ParseMath (commands : String) : TStringArray; ...

Предупреждение: For loop control variable must be simple local variable - Delphi
дан массив 3x6 найти максимальный элемент главной диагонали. unit Unit1; interface uses Windows, Messages, SysUtils,...

Ошибка: For loop control variable must be simple local variable - Delphi
Добрый день , дело вот в чем , написал я процедурку : procedure TForm1.DrawClock; var t:TDateTime; Color : TColor; ...

Warning: For loop control variable must be simple local variable - Delphi
Реализация метода ДП - программирования для задачи о рюкзаке выдает ошибку Project1.dpr(16): For loop control variable must be simple...


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

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

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