delete释放new的char数组出错以及QByteArray使用问题

weixin_38052002 2019-09-19 01:15:59
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();有什么区别吗?  用前者一切正常...用后者都是乱码...
...全文
687 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38056418 2019-09-19
  • 打赏
  • 举报
回复
好好复习下指针吧        rx = new char[len+100];        rx = ba.data();        delete []rx;        rx = NULL;等价于        rx = new char[len+100];        delete []  ba.data();        rx = NULL;导致什么问题自己看吧
weixin_38062058 2019-09-19
  • 打赏
  • 举报
回复
delete [] 与 delete
weixin_38063224 2019-09-19
  • 打赏
  • 举报
回复
谢谢楼上回答^_^ 是不是把ba.data()赋值给指针后相当于上面的 new操作 是无效的了? 所以不用delete了?那用过之后 还需要释放吗? 该怎么释放呢?现在就是C++和QT一起在学着呵^_^后面那个 QByteArray 的乱码是什么原因呢?
weixin_38067646 2019-09-19
  • 打赏
  • 举报
回复
你只new了一个出来但delete的时候却delete一组 (delete [ ] )可以考虑用strcpy或memcpy代替  = 号
weixin_38071610 2019-09-19
  • 打赏
  • 举报
回复
引用第3楼fcymk2于2009-10-21 14:55发表的  :谢谢楼上回答^_^ 是不是把ba.data()赋值给指针后相当于上面的 new操作 是无效的了? 所以不用delete了?那用过之后 还需要释放吗? 该怎么释放呢?现在就是C++和QT一起在学着呵^_^.......建议好好看看书吧你现在一方面不停地申请内存,而且申请后既不使用又不释放。 (导致内存泄露)另一方面不停地释放其他地方的内存。 (导致程序崩溃)至于你QByteArray相关的东西,只要你的指针问题解决了应该会自动消失吧
weixin_38073873 2019-09-19
  • 打赏
  • 举报
回复
看看书,重写了下代码..写了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()); 就一切正常了...

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧