Russian Qt Forum
Ноябрь 24, 2024, 21:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Косяк с хипом при мультитреде.  (Прочитано 8357 раз)
Flake
Гость
« : Январь 19, 2009, 15:20 »

Здравствуйте.

Есть приложение которое читает xml, берёт нужные атрибуты(которые QString) и конвертирует их в std::string.
При этом Runtime Library - Multi-threaded.

Теперь в чем засада.
Если имеется один атрибут, кириллицей, то toStdString() отрабатывает нормально.
Но если же один атрибут кириллицей, а другой латиницей, то всё валится - какой-то косяк с хипом.

Вот кусок кода:
Код:
QString qqq;
qqq = QString::fromLocal8Bit("<configuration><reactions><parameter psevdonim=\"NONEACTION\" extraInfo=\"Отсуствие реакции\" /><parameter psevdonim=\"CALLABONENT\" extraInfo=\"Звонок абоненту\" /></reactions></configuration>");

domDocument.setContent(qqq, true, &errorStr, &errorLine, &errorColumn);

QDomElement root = domDocument.documentElement();

QDomElement sysMessElement = root.firstChildElement("reactions");
QDomNodeList sysMessParams = sysMessElement.elementsByTagName("parameter");
QDomElement parameter;
for (int p=0; p<sysMessParams.count(); p++)
{
parameter = sysMessParams.item(p).toElement();

QString asd;
asd = parameter.attribute("extraInfo").toLocal8Bit();
std::string qwe = asd.toStdString();
}

Как-то надо по другому конвертировать в std::string...
« Последнее редактирование: Январь 19, 2009, 15:24 от Flake » Записан
Dendy
Гость
« Ответ #1 : Январь 19, 2009, 15:26 »

openSUSE 11.1 x86_64, Qt 4.4.3. Не крешится.
Записан
Flake
Гость
« Ответ #2 : Январь 19, 2009, 15:28 »

У меня Qt 4.4.0 winXP.
Записан
Dendy
Гость
« Ответ #3 : Январь 19, 2009, 15:29 »

Ну вы поняли, да? Обновитесь.
Записан
Flake
Гость
« Ответ #4 : Январь 19, 2009, 16:30 »

Всё равно та же ошибка. Валится в секции #ifdef WINHEAP, так что в сусе мож всё нормально быть, а в винде косяк.

Как ещё можно переконвертить QString в std::string?
Записан
Dendy
Гость
« Ответ #5 : Январь 19, 2009, 16:44 »

Собрал на WinXP Pro SP2 с помощью VCExpress 2008. Работает не крешится. Можете весь код программы выложить? И сказать какой компиллятор используете.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Январь 19, 2009, 16:45 »

Всё равно та же ошибка. Валится в секции #ifdef WINHEAP, так что в сусе мож всё нормально быть, а в винде косяк.

А какой компилятор?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Flake
Гость
« Ответ #7 : Январь 19, 2009, 16:52 »

Который в студии 2008 team
Код:
#include <QtCore/QCoreApplication>
#include <QDomDocument>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QString errorStr;
int errorLine;
int errorColumn;

QDomDocument domDocument;

QString qqq;
qqq = "<configuration><reactions><parameter psevdonim=\"NONEACTION\" extraInfo=\"Отсуствие реакции\" /><parameter psevdonim=\"CALLABONENT\" extraInfo=\"Звонок абоненту\" /></reactions></configuration>";

domDocument.setContent(/*device*/qqq, true, &errorStr, &errorLine, &errorColumn);

QDomElement root = domDocument.documentElement();

QDomElement sysMessElement = root.firstChildElement("reactions");
QDomNodeList sysMessParams = sysMessElement.elementsByTagName("parameter");
QDomElement parameter;
for (int p=0; p<sysMessParams.count(); p++)
{
parameter = sysMessParams.item(p).toElement();

QString asd;
asd = parameter.attribute("extraInfo");
std::string qwe = asd.toStdString();



parameter.clear();
}

return a.exec();
}

Записан
Dendy
Гость
« Ответ #8 : Январь 19, 2009, 17:01 »

Qt 4.4.3, WinXP SP2, VCExpress 2008, ваша программа не крешится.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Январь 19, 2009, 17:09 »

2 Flake: Попробуйте обновиться до Qt 4.4.3


Проверил у себя, краша нет. Qt 4.4.3, WinXP SP2, VS2008 Pro
« Последнее редактирование: Январь 19, 2009, 17:12 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Flake
Гость
« Ответ #10 : Январь 19, 2009, 17:12 »

Я обновился, всё равно валится.
Ещё дома сегодня гляну, у меня там на чистой машине 4.4.3 версия.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Январь 19, 2009, 17:18 »

Я обновился, всё равно валится.

Странно. А какая конфигурация Qt?


Вот на трекере нашел вот такой баг репорт. Незнаю, связана ли ваша проблема с ним.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Flake
Гость
« Ответ #12 : Январь 19, 2009, 21:47 »

Дома то же самое  Злой
Конфигурация дефолтная, когда просто установщиком Qt ставится.
Записан
Dendy
Гость
« Ответ #13 : Январь 19, 2009, 22:00 »

Так вы используете уже собранную Qt с сайта? Если да, то хочу вас огорчить, мешать разные рантайм библиотеки в C++ моветон. Соберите Qt сами тем же компилятором что собираете свою программу.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #14 : Январь 19, 2009, 23:00 »

Так вы используете уже собранную Qt с сайта? Если да, то хочу вас огорчить, мешать разные рантайм библиотеки в C++ моветон. Соберите Qt сами тем же компилятором что собираете свою программу.

+1
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.