最近在测试QT的内存泄露,发现了不少问题,举个例子。

weixin_38053953 2019-09-19 01:13:55
到底是我的理解错误,还是QT真存在着内存泄露? 例如下面两个例子,非常简单,for循环结束后:例子一,占用了2.4MB内存;例子二,占用了3.6MB内存; 之间相差了1MB内存,到底,这1MB内存,用到了什么地方? 例子一和例子二,只是把11和1100000两个数字换位了。 例子一:int main(int argc,char*argv[]){    QApplication app(argc,argv);    QList<QString>* ls=new QList<QString>();    for(int j=0;j<1100000;j++)    {        for(int i=0;i<11;i++)         {   ls->append(QString::number(i));  }        ls->clear();    }    delete ls;    return app.exec();} 例子二:int main(int argc,char*argv[]){    QApplication app(argc,argv);    QList<QString>* ls=new QList<QString>();    for(int j=0;j<11;j++)    {        for(int i=0;i<1100000;i++)   {    ls->append(QString::number(i));   }        ls->clear();    }    delete ls;    return app.exec();}
...全文
238 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38061608 2019-09-19
  • 打赏
  • 举报
回复
之间多出的1MB,属不属于内存泄露?
weixin_38061732 2019-09-19
  • 打赏
  • 举报
回复
“泄露”指的是占用了内存,但程序却没有任何指针指向该块内存。LZ可以了解下“内存池”概念,感觉应该是内存池的申请及释放机制对两种for嵌套的处理有所不同导致。
weixin_38067509 2019-09-19
  • 打赏
  • 举报
回复
引用第2楼iptton于2012-05-26 12:32发表的  :“泄露”指的是占用了内存,但程序却没有任何指针指向该块内存。LZ可以了解下“内存池”概念,感觉应该是内存池的申请及释放机制对两种for嵌套的处理有所不同导致。 好的。不过,我的两个例子,只是交换了数字,两个for,变成了两种for?有什么本质上的不同吗?
weixin_38067813 2019-09-19
  • 打赏
  • 举报
回复
int array[10]占用多少内存?int array[10][10]占用多少内存?
weixin_38067822 2019-09-19
  • 打赏
  • 举报
回复
引用第4楼benbenmajia于2012-05-26 17:09发表的  :int array[10]占用多少内存?int array[10][10]占用多少内存? QList的clear()函数,不会释放内存吗?
weixin_38069045 2019-09-19
  • 打赏
  • 举报
回复
貌似这些应该是C++的概念。。。
weixin_38089150 2019-09-19
  • 打赏
  • 举报
回复
能够手动释放么?
weixin_38108279 2019-09-19
  • 打赏
  • 举报
回复
为什么要手动释放呢?用STL容器就是为了方便,不用自己手写list什么的。再说现在是什么机器都不缺内存,没必要计较那一点内存。
weixin_38113326 2019-09-19
  • 打赏
  • 举报
回复
如果非要手动释放的话,大概QList::reserve()这个有帮助

433

社区成员

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

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