0
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”:\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_plusC:QT_project”。 \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', 找不到或打开C_plus_plus_QT_project.exe 中 0x53b8ad7a (msvcp100d.dll) 处的 PDB 文件第一次机会异常:0xC0000005:访问冲突读取位置 0xccccccd0。C_plus_plus_QT_project.exe 中 0x53b8ad7a (msvcp100d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xccccccd0。访问冲突读取位置 0xccccccd0。C_plus_plus_QT_project.exe 中 0x53b8ad7a (msvcp100d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xccccccd0。访问冲突读取位置 0xccccccd0。C_plus_plus_QT_project.exe 中 0x53b8ad7a (msvcp100d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xccccccd0。

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

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

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

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

4

1 回答 1

2

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

于 2012-07-23T21:07:54.983 回答