QString::toStdString() release bug
(2013-03-30 17:54:22)
标签:
qttostdstringqstringreleasebug |
分类: Qt |
今天在使用自己之前开发windows上的工具时,发现有些情况必定崩溃,回来调试时却发现debug没问题,release版本却必现。后来一步步苦逼地用OutputDebugStr()调试才发现是QString::toStdString()的问题。
上网查资料原来早就有人发现这个问题了。
这个csdn的帖子就有讨论了http://bbs.csdn.net/topics/370125413 。
帖子说下边这段代码在release版本必现
#include
#include
using
namespace
std;
int
main(
int
argc,
char
*argv[])
{
QCoreApplication a(argc, argv);
QString qstr =
"http://www.baidu.com"
;
{
string str = qstr.toStdString();
}
return
a.exec();
}
我发现只要QString的内容里边有出现多于两个'/'就会出现在调用toStdString()函数时崩溃。
csdn的贴说是链接库的运行时链接方式混用的问题,但是我却不觉得是这样,而且我调整了所用库,使其都是运行时动态链接的,却还是会出现这个问题,而当字符串里边没有出现斜杠的时候就没问题。这充分表明不是因为链接库的运行时链接方式混用导致的内存拷贝问题,如果是这个问题,那么所有字符串都会遇到这个问题,而不是有些字符串会出问题,有些不会。
最后个人感觉这个应该是qt在兼容C++库的一个bug,后边自己找到了一个应付这种bug的办法:
QString sPath =
"E:\test\test.txt";
std::string sPathName =
std::string((const char*) sPath.toLocal8Bit());
个人理解这应该是关于QString
在toStdString函数中处理转义字符时出现一些小bug,toLocal8Bit()函数处理的8位数据却刚好避过了这个问题。
这只是我在使用中的理解,如果有什么错误的地方欢迎吐槽!!
前一篇:mfc 消息映射实现3