Название: Косяк с хипом при мультитреде. Отправлено: Flake от Январь 19, 2009, 15:20 Здравствуйте.
Есть приложение которое читает xml, берёт нужные атрибуты(которые QString) и конвертирует их в std::string. При этом Runtime Library - Multi-threaded. Теперь в чем засада. Если имеется один атрибут, кириллицей, то toStdString() отрабатывает нормально. Но если же один атрибут кириллицей, а другой латиницей, то всё валится - какой-то косяк с хипом. Вот кусок кода: Код: QString qqq; Как-то надо по другому конвертировать в std::string... Название: Re: Косяк с хипом при мультитреде. Отправлено: Dendy от Январь 19, 2009, 15:26 openSUSE 11.1 x86_64, Qt 4.4.3. Не крешится.
Название: Re: Косяк с хипом при мультитреде. Отправлено: Flake от Январь 19, 2009, 15:28 У меня Qt 4.4.0 winXP.
Название: Re: Косяк с хипом при мультитреде. Отправлено: Dendy от Январь 19, 2009, 15:29 Ну вы поняли, да? Обновитесь.
Название: Re: Косяк с хипом при мультитреде. Отправлено: Flake от Январь 19, 2009, 16:30 Всё равно та же ошибка. Валится в секции #ifdef WINHEAP, так что в сусе мож всё нормально быть, а в винде косяк.
Как ещё можно переконвертить QString в std::string? Название: Re: Косяк с хипом при мультитреде. Отправлено: Dendy от Январь 19, 2009, 16:44 Собрал на WinXP Pro SP2 с помощью VCExpress 2008. Работает не крешится. Можете весь код программы выложить? И сказать какой компиллятор используете.
Название: Re: Косяк с хипом при мультитреде. Отправлено: pastor от Январь 19, 2009, 16:45 Всё равно та же ошибка. Валится в секции #ifdef WINHEAP, так что в сусе мож всё нормально быть, а в винде косяк. А какой компилятор? Название: Re: Косяк с хипом при мультитреде. Отправлено: Flake от Январь 19, 2009, 16:52 Который в студии 2008 team
Код: #include <QtCore/QCoreApplication> Название: Re: Косяк с хипом при мультитреде. Отправлено: Dendy от Январь 19, 2009, 17:01 Qt 4.4.3, WinXP SP2, VCExpress 2008, ваша программа не крешится.
Название: Re: Косяк с хипом при мультитреде. Отправлено: pastor от Январь 19, 2009, 17:09 2 Flake: Попробуйте обновиться до Qt 4.4.3
Проверил у себя, краша нет. Qt 4.4.3, WinXP SP2, VS2008 Pro Название: Re: Косяк с хипом при мультитреде. Отправлено: Flake от Январь 19, 2009, 17:12 Я обновился, всё равно валится.
Ещё дома сегодня гляну, у меня там на чистой машине 4.4.3 версия. Название: Re: Косяк с хипом при мультитреде. Отправлено: pastor от Январь 19, 2009, 17:18 Я обновился, всё равно валится. Странно. А какая конфигурация Qt? Вот на трекере нашел вот такой баг репорт (http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=183776). Незнаю, связана ли ваша проблема с ним. Название: Re: Косяк с хипом при мультитреде. Отправлено: Flake от Январь 19, 2009, 21:47 Дома то же самое >:(
Конфигурация дефолтная, когда просто установщиком Qt ставится. Название: Re: Косяк с хипом при мультитреде. Отправлено: Dendy от Январь 19, 2009, 22:00 Так вы используете уже собранную Qt с сайта? Если да, то хочу вас огорчить, мешать разные рантайм библиотеки в C++ моветон. Соберите Qt сами тем же компилятором что собираете свою программу.
Название: Re: Косяк с хипом при мультитреде. Отправлено: pastor от Январь 19, 2009, 23:00 Так вы используете уже собранную Qt с сайта? Если да, то хочу вас огорчить, мешать разные рантайм библиотеки в C++ моветон. Соберите Qt сами тем же компилятором что собираете свою программу. +1 Название: Re: Косяк с хипом при мультитреде. Отправлено: Flake от Январь 20, 2009, 22:55 Пересобрал Qt. Запустил Visual Studio 2008 Command Prompt, потом configure и nmake. Глюк не ушёл, я в панике ???
~ В общем спасибо за помощь. Я решил вопрос путем не использования toStdString(). А сделал как написано в ассистенсе - сначала ковертить в cons char * и потом в std::string. Название: Re: Косяк с хипом при мультитреде. Отправлено: Dendy от Январь 20, 2009, 23:58 Крайне странно. У меня ощущение, что вы всё же ошиблись в процессе сборки Qt или своей программы. Сделайте всё с чистого листа. Удалите Qt и стяните только исходники с сайта в zip-архиве. Соберите с помощью:
configure nmake Вычистите все обьектные файлы из своей программы и соберите её с нуля этим же компилятором, используя только что собраную версию Qt. |