4

我在使用 QList 后尝试释放内存,但它似乎无法正常工作。这是我的代码:

QList<double> * myList;
myList = new QList<double>;

double myNumber;

cout << "CP1" << endl;
getchar();  // checkpoint 1

for (int i=0; i<1000000; i++)
{
    myNumber = i;
    myList->append(myNumber);
    cout << myList->size() << endl;
}

cout << "CP2!" << endl;
getchar();  // checkpoint 2


for (int i=999999; i>0; i--)
{
    myList->removeLast();
    cout << myList->size() << endl;
}

cout << "CP3!" << endl;
getchar();  // checkpoint 3

delete myList;

cout << "CP4!" << endl;
getchar();  // checkpoint 4

内存使用情况:

  • CP1:460k
  • CP2:19996k
  • CP3:19996k
  • CP4:16088k

myList因此,尽管删除了元素并删除了大部分内存,但看起来仍在使用中。我相信有办法处理它,但我找不到它。

提前感谢您的帮助。

帕维尔

4

2 回答 2

3

内存管理器不需要释放程序分配的内存。您的释放没有问题。

于 2010-02-16T17:05:54.233 回答
0

QList 是一个基于数组的列表。数组会自动扩展,但不会自动收缩。从列表中删除元素不会影响数组的大小。

要将数组修剪到实际大小,请创建一个新 QList 并将内容添加到其中。然后删除原始列表。

不幸的是,似乎没有方便的方法来执行此操作,例如 .NET 中的 List.TrimExcess()。

于 2010-02-17T12:45:48.610 回答