Преобразование из Qstring в std::string вызывает исключение

#c #qt4

#c #qt4

Вопрос:

Удивительно, что приведенный ниже код генерирует исключение.

 QString qtemp = QDir::tempPath(); 
std::string temp = qtemp.toStdString();  
std::cout<<temp<<std::endl;
  

Когда я выполнял отладку с помощью visual studio — я ввожу значение переменной qtemp . Но на следующем шаге я получаю НЕВЕРНЫЙ указатель от отладчика, что приводит к исключению, когда я выполняю то же самое.

Комментарии:

1. Можете ли вы опубликовать полную компилируемую программу, которая воспроизводит это (возможно, даже включает файл .pro)? Если я удалю эти строки в main() функции с добавлением соответствующих #include символов, я не вижу проблемы.

2. Если путь содержит символы юникода, то этот код может вызвать проблемы.

3. @ Michael Burr — К сожалению, это небольшая часть моей программы, и предоставление файла .pro было бы не идеально. Однако я попробовал, комментируя каждую вторую строку в программе, и все та же проблема остается. @wilhelmtell — каким было бы решение?

4. Вместо этого используйте .toStdWString() и std::wstring .

Ответ №1:

Это известный симптом, если вы смешиваете библиотеки DLL debug и release.

Комментарии:

1. вы, сэр, избавили меня от многих проблем