QList的内存问题想不明白了,请大家指点一下.

sno_guo 2013-12-19 09:55:23
我的测试代码如下:
#include <QtCore/QCoreApplication>
#include <QList>
#include <QDebug>
QList<int> list;
void testlist()
{
for(int i=0;i<20;i++){
list<<(i+20); ///<--------增加到链表中的是 局部变量, 不是通过内存来分配的,
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

testlist();
for(int i=0;i<20;i++)
qDebug()<<list.at(i);
return a.exec();
}
而我的理解是 临时变量是分配到栈里的, 那么在出栈的时候, 自然就释放了,那么链表中的数据当然也就没有了, 为什么在接下来链表打印时还可以打印出来, 不明白,往各位指教一下,谢谢.
...全文
801 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2013-12-19
  • 打赏
  • 举报
回复
好吧,上边的已经说了原因了。<<操作,list自己malloc出空间存放int了,你以为把临时变量的地址放进去了,其实是一次deep copy.
ppdayz 2013-12-19
  • 打赏
  • 举报
回复
引用 楼主 sno_guo 的回复:
我的测试代码如下: #include <QtCore/QCoreApplication> #include <QList> #include <QDebug> QList<int> list; void testlist() { for(int i=0;i<20;i++){ list<<(i+20); ///<--------增加到链表中的是 局部变量, 不是通过内存来分配的, } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); testlist(); for(int i=0;i<20;i++) qDebug()<<list.at(i); return a.exec(); } 而我的理解是 临时变量是分配到栈里的, 那么在出栈的时候, 自然就释放了,那么链表中的数据当然也就没有了, 为什么在接下来链表打印时还可以打印出来, 不明白,往各位指教一下,谢谢.
你的理解不对,list就像一个容器,句柄变量存到容器里面,然后你再从容器里面取出,取到的当然是你存放的了,没有什么不好理解的
儿大不由爷 2013-12-19
  • 打赏
  • 举报
回复
list<<(i+20);只是传递了个值进去,list里面的存储空间是list自己控制的。你的代码没有分配内存,并不代表list没做这件事情。
sno_guo 2013-12-19
  • 打赏
  • 举报
回复
哦, 是的, 是这样的. 之前用C语言的时候, 写一个链表时, 就是先malloc一个指针, 然后把一个结构体指针赋值进来,呵呵 谢谢各位了,谢谢!

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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