【发布时间】:2011-11-07 02:51:24
【问题描述】:
我正在编写一个使用vector 的程序,例如vector<Myclass* >
该向量的长度约为 1000,我使用 for 循环将大约 200 个新对象指针不断推入向量中,并使用 erase() 函数选择其中的 100 个进行擦除。
对于每个被删除的对象,我使用 delete 来释放内存。在析构函数的最后一行我使用 sizeof(this) 来检查内存是否已成功释放。它总是返回 0。
但是我在 ubuntu 上使用 top 命令来检查这个进程的内存使用情况。大约 3 400 次迭代,它将使用 89% 的内存用于我的 2GB 内存实验室顶部。 我猜这是因为 Myclass 对象释放的内存没有被重用,并且向量不断向操作系统询问内存。
有人对此有任何想法吗?
【问题讨论】:
-
请给我们一些代码示例。
-
您有内存泄漏。使用标准方法(例如
valgrind)来查找/修复它。 -
sizeof(this)检查内存是否释放成功 - 你有很多要学的,我的朋友。听起来像内存泄漏... -
向量拥有它所包含的对象,所以当你从向量中删除它们时,它们的内存应该被自动删除。如果您还要手动删除它,您可能会弄乱堆,这可能是您看到的问题的根源。
-
一个包含 1000 个元素的指针向量在 64 位机器上将占用大约 8kB。泄漏是未正确删除对象的结果。这不是向量的错。