• 11828阅读
  • 6回复

delete释放new的char数组出错以及QByteArray使用问题 [复制链接]

上一主题 下一主题
离线fcymk2
 

只看楼主 正序阅读 楼主  发表于: 2009-10-21
    QString str;
    QByteArray ba;
    char *rx;
    qint32 len;
    while (1)
    {
        str.clear();
        len = 40;
//        rx = new char[len];
        rx = new char[len+100];
        for (qint32 i=0; i<len; ++i)
        {
            str += QString::number(i, 10);
        }
        ba = str.left(len).toLatin1();
        rx = ba.data();
//        rx = str.left(len).toLatin1().data();
        isDisplay = true;
//        emit SerialPortThreadReceiveData();
//        while (isDisplay == true);
        delete []rx;
        rx = NULL;
     }

     如果使用 delete []rx; 程序运行一会就提示应用程序出错,
     本来以为是以为给rx分配的空间不够...改成 new char[len+100]; 还是一样


关于 QByteArray:
使用        ba = str.left(len).toLatin1();      rx = ba.data();
和使用    rx = str.left(len).toLatin1().data();
有什么区别吗?  用前者一切正常...用后者都是乱码...
离线fcymk2

只看该作者 6楼 发表于: 2009-10-22
看看书,重写了下代码..
写了2种...跑起来都没出错,就是不知道还有没有问题....
1>
        ba = str.left(len).toLatin1();
        rx = ba.data();
        rx = NULL;
2>
        rx = new char[len];
        ba = str.left(len).toLatin1();
        strcpy(rx, ba.data());
        delete []rx;
        rx = NULL;

另外, QByteArray 相关的问题, 当我使用方法1>的时候,使用rx = str.left(len).toLatin1().data();还是乱码....应该1>里面还是哪有问题吧....愣是没看出来@_@
用在2>里面 strcpy(rx, str.left(len).toLatin1().data()); 就一切正常了...
离线dbzhang800

只看该作者 5楼 发表于: 2009-10-21
引用第3楼fcymk2于2009-10-21 14:55发表的  :
谢谢楼上回答^_^
是不是把ba.data()赋值给指针后相当于上面的 new操作 是无效的了? 所以不用delete了?
那用过之后 还需要释放吗? 该怎么释放呢?
现在就是C++和QT一起在学着呵^_^
.......


建议好好看看书吧

你现在一方面不停地申请内存,而且申请后既不使用又不释放。 (导致内存泄露)

另一方面不停地释放其他地方的内存。 (导致程序崩溃)

至于你QByteArray相关的东西,只要你的指针问题解决了应该会自动消失吧
离线donixli1314

只看该作者 4楼 发表于: 2009-10-21
你只new了一个出来
但delete的时候却delete一组 (delete [ ] )

可以考虑用strcpy或memcpy代替  = 号
离线fcymk2

只看该作者 3楼 发表于: 2009-10-21
谢谢楼上回答^_^
是不是把ba.data()赋值给指针后相当于上面的 new操作 是无效的了? 所以不用delete了?
那用过之后 还需要释放吗? 该怎么释放呢?

现在就是C++和QT一起在学着呵^_^

后面那个 QByteArray 的乱码是什么原因呢?
离线donixli1314

只看该作者 2楼 发表于: 2009-10-21
delete [] 与 delete
离线dbzhang800

只看该作者 1楼 发表于: 2009-10-21
好好复习下指针吧
        rx = new char[len+100];
        rx = ba.data();
        delete []rx;
        rx = NULL;

等价于
        rx = new char[len+100];
        delete []  ba.data();
        rx = NULL;

导致什么问题自己看吧
快速回复
限100 字节
 
上一个 下一个