内存泄漏(类型)与静态std :: vector

时间:2009-05-22 14:51:55

标签: c++ memory stl vector memory-leaks

我在课堂上有一个静态std::vector。当我使用微软的内存泄漏检测工具时:

_CrtMemState state;
_CrtMemCheckpoint( & state);
_CrtMemDumpAllObjectsSince( & state );

在我将内容插入向量后报告泄漏。这对我来说很有意义,因为当向量中插入某些内容时会分配新的空间。在程序终止之前,该空间不会被释放(因为向量是静态的)。这是对的吗?

在包含向量的类的析构函数中,我正在删除放入向量的对象。但是,插入时分配的内存仍然存在。反正有没有删除这个空间?

3 个答案:

答案 0 :(得分:16)

您可以将矢量换成空的 - 这将释放内存。

另见Q: Shrinking a vector

答案 1 :(得分:8)

添加詹姆斯所写的内容。他的意思是这样做:

std::vector<T>().swap(v);

其中'v'是要释放其内存的向量。

答案 2 :(得分:0)

这只是Visual Studio的一个怪癖。向量析构函数确实释放了内存,但内存检查模块并不总是发现它,所以它会抱怨。这有点痛苦,但无需担心。