加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

QString::toStdString() release bug

(2013-03-30 17:54:22)
标签:

qt

tostdstring

qstring

release

bug

分类: 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位数据却刚好避过了这个问题。
这只是我在使用中的理解,如果有什么错误的地方欢迎吐槽!!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有