Qt 4.8.2 QString toStdString 未处理异常

Posted

技术标签:

【中文标题】Qt 4.8.2 QString toStdString 未处理异常【英文标题】:Qt 4.8.2 QString toStdString unhandled exception 【发布时间】:2012-07-22 02:12:03 【问题描述】:
void QuinielaApuesta::funcion(QString & str)

    std::string cadenita = str.toStdString();
    std::cout << cadenita << std::endl;

我在 VS2010、Windows 7 N 64 位、Visual Studio 2010 的 Qt 4.8.2 上使用 QString 方法“toStdString()”(或一些相关的东西)会导致未处理的异常。

在哪里使用这条线并不重要

std::string cadenita = str.toStdString();

这将导致未处理的异常。在这种特殊情况下,它发生在我离开方法“函数”的范围之后。但是它发生在当前范围转义的上下文中(也就是说,如果你把这一行放在一个对象的构造函数中,它将按预期进行,直到构造函数结束,然后当它应该进入更高的范围级别时,它将发送一个未处理的异常错误)。

我已经通过反复试验将问题隔离到 .toStdString,我不能说其他方法是否可能(或可能)有同样的问题。但是,我可以说,只要该行被评论,一切正常。事实上,如果我用一个简单的替换所说的行

std::cout << "Some Funny Test Text" std::endl;

一切都很好,花花公子。

错误是

C_plus_plus_QT_project.exe 中 0x53b8ad7a (msvcp100d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xccccccd0。

然后在文件 xutility 中,第 201 行

 #if _ITERATOR_DEBUG_LEVEL == 2
if (_Myproxy != 0)
       // proxy allocated, drain it
    _Lockit _Lock(_LOCK_DEBUG);

    for (_Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter;
        *_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter) // HERE IS THE LINE WHERE THE BREAK KICKS IN
        (*_Pnext)->_Myproxy = 0;
    _Myproxy->_Myfirstiter = 0;
    

Visual Studio 的输出是:

“C_plus_plus_QT_project.exe”:已加载“C:\Users\aravasio\Desktop\C_plus_plus_QT_project\Debug\C_plus_plus_QT_project.exe”,已加载符号。 'C_plus_plus_QT_project.exe':已加载 'C:\Windows\SysWOW64\ntdll.dll',找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\kernel32.dll”,找不到或打开 PDB 文件 'C_plus_plus_QT_project.exe':已加载 'C:\Windows\SysWOW64\KernelBase.dll',找不到或打开 PDB 文件 'C_plus_plus_QT_project.exe':已加载 'C:\Users\aravasio\Desktop\C_plus_plus_QT_project\Debug\QtGui4.dll',二进制文件未使用调试信息构建。 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\gdi32.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\user32.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\advapi32.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\msvcrt.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\sechost.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\rpcrt4.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\sspicli.dll”,找不到或打开 PDB 文件 'C_plus_plus_QT_project.exe':已加载 'C:\Windows\SysWOW64\cryptbase.dll',找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\lpk.dll”,找不到或打开 PDB 文件 'C_plus_plus_QT_project.exe':已加载 'C:\Windows\SysWOW64\usp10.dll',找不到或打开 PDB 文件 'C_plus_plus_QT_project.exe': 加载 'C:\Windows\SysWOW64\comdlg32.dll',找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\shlwapi.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.17514_none_ec83dffa859149af\comctl32.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\shell32.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\oleaut32.dll”,找不到或无法打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\ole32.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\imm32.dll”,找不到或无法打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\msctf.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\winmm.dll”,找不到或无法打开 PDB 文件 'C_plus_plus_QT_project.exe':已加载 'C:\Windows\SysWOW64\winspool.drv',找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Users\aravasio\Desktop\C_plus_plus_QT_project\Debug\QtCore4.dll”,二进制文件未使用调试信息构建。 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\ws2_32.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\nsi.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_50934f2ebcb7eb57\msvcp90.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_50934f2ebcb7eb57\msvcr90.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\msvcp100d.dll”,已加载符号。 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\msvcr100d.dll”,已加载符号。 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\uxtheme.dll”,找不到或打开 PDB 文件 “C_plus_plus_QT_project.exe”:已加载“C:\Windows\SysWOW64\dwmapi.dll”,找不到或打开 PDB 文件 C_plus_plus_QT_project.exe 中 0x53b8ad7a (msvcp100d.dll) 的第一次机会异常:0xC0000005:访问冲突读取位置 0xccccccd0。 C_plus_plus_QT_project.exe 中 0x53b8ad7a (msvcp100d.dll) 处未处理的异常:0xC0000005:访问冲突读取位置 0xccccccd0。

如果我能提供有关我的系统的任何其他信息,我将很高兴。

我只能做出某种有根据的猜测,这不是 Qt 错误,因为在家里我完全没有问题(但在家里我使用的是 x86 W7,所以这可能不是一个很好的例子) .

有人知道吗?我用谷歌搜索了很多,但似乎每个错误都已在旧的修补程序中得到解决。

我应该弃船试试 VS2008 吗?它适用于 x64 环境吗? (版本将针对 x86,顺便说一句,而不是 x64)

【问题讨论】:

【参考方案1】:

您编译了调试目标,但您将它与 Qt dll 的发布变体链接(QtCore4.dllQtGui4.dll 而不是 QtCored4.dllQtGuid4.dll)。

【讨论】:

我该如何解决这个问题,因为我认为我确定不是这种情况。 没关系,我修好了。你是 100% 正确的。我不敢相信我错过了。你真棒。谢谢你。 @alexisdm 为我提供了困扰我一天的问题的答案而点赞

以上是关于Qt 4.8.2 QString toStdString 未处理异常的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 QString转换成char *乱码问题

Qt Qstring与c++标准string 的转化

QString::toStdString() 在 std::string 析构函数上崩溃

QT QString转char*,char*转QString;简单明了,看代码。

QT+PCL 读取文件乱码问题

损坏的 winapi 可执行清单