我正在调试一段代码。每次调试该函数时,我发现数据存储地址是相同的。
我试图解释它。令我感到困惑的是,每当我退出该功能时,分配在堆栈上的内存就被释放了,为什么会一样?
QList<int> PixMapVsImage::getIntList()
{
QList<int> list;
list << 1 << 2;
qDebug() << (&list) ;
qDebug() << (&list.at(0));
return list;
}
我真的不知道为什么内存分配地址相同吗?所以我真的不知道实际结果是什么。
答案 0 :(得分:1)
基本上,局部变量的地址反映了调用堆栈的深度。如果每次都以相同的顺序调用该函数,则其局部变量位于同一位置就不足为奇了。
现在,列表中的元素可能已分配在堆上。典型的堆实现将维护最近释放的块的列表(free list)。如果您从堆中分配N
个字节,然后对其进行分配,然后再次分配N
个字节,则很有可能您将返回相同的块,而不是空闲列表的顶部。这可能是您观察到的。