Bug 10144 - Проблема при использовании стековых переменных
: Проблема при использовании стековых переменных
Status: CLOSED NOTABUG
: Sisyphus
(All bugs in Sisyphus/gcc4.1-c++)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2006-10-16 19:40 by
Modified: 2008-06-08 22:29 (History)


Attachments
Исходный код и Makefile (931 bytes, application/x-gzip)
2006-10-17 10:08, Ilia Korolyov
no flags Details


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2006-10-16 19:40:04
Актуальный сизиф. gcc 4.1.1 20060928 (ALT Linux, build 4.1.1-alt9)
Есть следующий код


int main( int argc, char** argv )
{
        try
        {
                boost::regex
re("(\\w+):\\/\\/(([^:]+?)(:(.+))?@)?([^:\\/]+)(:(\\d+))?((\\/.+?)*)(\\?(.+?))?(#(.+))?");
                boost::match_results<std::string::const_iterator> what;

                std::string
first("http://breeze@abc.ru/banner.jsp?keywords=%CC%E5%E3%E0%F4%EE%ED&id=1&ip=1.1.1.1&version=1#123");


                boost::regex::locale_type loc("ru_RU.cp1251");
//              re.imbue( loc );

                for( int i=0; i<5; ++i )
                {
                        if(
!boost::regex_match(boost::algorithm::trim_copy(first), what, re) ) continue;
                        cerr << "res =  " << what[12].str() << endl;

                        string tmp = boost::algorithm::trim_copy(first);
                        if( !boost::regex_match(tmp, what, re) ) continue;
                        cerr << "res2 =  " << what[12].str() << endl;
                }

                re.imbue( loc );
        }
        catch (std::exception& ex)
        {
                cerr << "UGLY STANDART ERROR: " << ex.what() << endl;
                return -1;
        }
        catch(...)
        {
                cerr << "UGLY ERROR: UNHANDLED EXCEPTION" << endl;
                return -1;
        }

        return 0;
}

Данные код просто парсит URL при помощи boost::regex, есть две проблемы:
1. Строки "res=..." и "res2=..." должны быть одинаковыми, реально получается

res =  keywords=%CC%E5%E3%E0%F4%EE%ED&iи╟Aь╥╟Aь╥.1&version=1
res2 =  keywords=%CC%E5%E3%E0%F4%EE%ED&id=1&ip=1.1.1.1&version=1

т.е. в строке "res=..." присутствует явный мусор

Подобное поведение встречается не только при работе с boost, но и с
произвольными объектами в случае, когда результат функции не сохраняется явно в
какой-то переменной, а непосредственно передаётся в другую функцию


PS Возможно я обратился не по адресу - подскажите, куда следует обратиться
Steps to Reproduce:
make && run
------- Comment #1 From 2006-10-16 20:06:38 -------
У меня подозрение что где-то внутри переполнение стека.
------- Comment #2 From 2006-10-17 10:08:56 -------
Created an attachment (id=1662) [details]
Исходный код и Makefile

Просто для удобства добавил полный код тестового приложения
------- Comment #3 From 2006-11-22 11:00:42 -------
Что-то прояснилось?
------- Comment #4 From 2006-12-04 00:14:49 -------
*** Bug 10148 has been marked as a duplicate of this bug. ***
------- Comment #5 From 2006-12-04 00:21:54 -------
Я думаю что это ошибка в тестовой программе.  Если вы подозреваете ошибку
в компиляторе, просьба представить тест попроще и без использования boost.
------- Comment #6 From 2008-06-08 22:29:15 -------
Недостаточно информации, закрываю.