【发布时间】:2013-03-14 17:01:17
【问题描述】:
我已经调试了 2 个小时,归结为这个。如果我打电话给QString::toStdString
QString s = "testtesttesttesttesttest";
const std::string &temp = s.toStdString();
程序稍后在 std::string 析构函数上崩溃
__CLR_OR_THIS_CALL ~basic_string()
{ // destroy the string
_Tidy(true); // <---- It crashes on this line.
}
一开始我以为是内存损坏,但即使main() 只包含那两行,也会发生这种情况。有谁知道为什么会发生这种情况,以及我该如何解决?
我的 Qt 版本是4.8.1。
【问题讨论】:
-
您使用的是什么版本的 Qt?如果您存储字符串
string temp = s.toStdString();的副本而不是引用,会发生什么? -
string temp = s.toStdString();也会发生同样的事情,只是发生得更早,因为toStdString()返回的临时变量的析构函数被立即调用。如何查看我正在使用的 Qt 版本?我在哪里看?该项目已由其他人建立,我没有在 Visual Studio 中使用 Qt 的经验,仅使用 Qt Creator。 -
试试这个:
std::string stdUtf8 = qs.toUtf8().constData(); -
同样的事情也发生在我身上!最后我只是调用了 toLocal8Bit。
-
@Najzero 是的,这行得通。但是我不愿意让这个 bug 潜伏,因为很明显项目的配置有问题。
标签: c++ visual-studio qt crash