Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция искажает возвращаемое значение. / 8 сообщений из 8, страница 1 из 1
28.05.2014, 01:03
    #38653953
Mihalyth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция искажает возвращаемое значение.
Здравствуйте.
Я только разбираюсь с С++, так что не судите строго.
Делаю функцию в форме, которая читает rss-ленту и выдаёт её для вывода в Мемо.
Заголовок:
private:
char* GetProjects(char *url);
Реализация:
char* TForm1::GetProjects(char *url)
{
char* v;
char* val;
try
{
CHTTPReader rd("dalance.ru");
if (rd.Get("projects.xml"))
{
v=rd.GetData();
}
}
catch (Exception &exception){Application->ShowException(&exception);}
val=v;
return val;
}
CHTTPReader - класс-обёртка над wininet.
Адрес пока забит жёстко. Переменная v введена для отладки.
Проблема:
Вместо xml функция выдаёт следующее: "(9љ". Всё.
v=rd.GetData(); - в v - xml.
val=v; - тоже нормально.
return val; - обе переменные становятся "(9љ". То же идёт в выдачу.
Если вставляю тот же код в загрузку формы (с выводом прямо в Мемо) - всё работает.
Но нужно именно функцией - будет в нескольких местах.
Подскажите, пожалуйста, что это за шутки.
...
Рейтинг: 0 / 0
28.05.2014, 01:17
    #38653957
Mihalyth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция искажает возвращаемое значение.
Забыл сказать. Пишу в C++ Builder 6.
...
Рейтинг: 0 / 0
28.05.2014, 01:30
    #38653960
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция искажает возвращаемое значение.
CHTTPReader rd; - локальная переменная
v=rd.GetData(); - указатель на что-то внутри локальной переменной
return - локальные переменные уничтожены (выход из области видимости), указатели стали не корректы

И что удивляет?
...
Рейтинг: 0 / 0
28.05.2014, 01:41
    #38653962
Mihalyth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция искажает возвращаемое значение.
Удивляет следующее.
Пробовал такой вариант
char* val="";
char* TForm1::GetProjects(char *url, char* &val)
{
try
{
CHTTPReader rd("dalance.ru");
if (rd.Get("projects.xml"))
{
val=rd.GetData();
}
}
catch (Exception &exception){Application->ShowException(&exception);}
}
С соответственным заголовком.
После завершения метода внешний val (по идее, глобальный для класса) становится опять же "(9љ".
Чую, что сидит какая-то "детская" ошибка, но найти не могу. Раньше работал на нетовских языках, там этих проблем не было. ткните носом, пожалуйста.
...
Рейтинг: 0 / 0
28.05.2014, 01:48
    #38653963
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция искажает возвращаемое значение.
измени тип возвращаемого значения для твоей функции на std::string.
...
Рейтинг: 0 / 0
28.05.2014, 02:06
    #38653968
Mihalyth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция искажает возвращаемое значение.
MasterZiv, спасибо, заработало. Только с AnsiString.
...
Рейтинг: 0 / 0
28.05.2014, 02:10
    #38653969
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция искажает возвращаемое значение.
MihalythПосле завершения метода внешний val (по идее, глобальный для класса)...

Дружеский совет, если ты не понимаешь отличие УКАЗАТЕЛЯ от переменной хранящей значения - удали с компьютера C и поставь Бейсик. Кернигана с Ричи жалко, явно сейчас в гробу переворачиваются.
...
Рейтинг: 0 / 0
28.05.2014, 02:13
    #38653970
Mihalyth
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция искажает возвращаемое значение.
Я х говорю, в С++ пока чайник. В том же C# немного по-другому. Буду учить матчасть. Спасибо за подсказку.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Функция искажает возвращаемое значение. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]