我一直在从事的一个大型项目中遇到内存泄漏问题,但根据 VS2010 内存检查器,该项目没有泄漏(我已经广泛检查了所有内容)。
我决定编写一个简单的测试程序,看看泄漏是否会在较小的范围内发生。
struct TestStruct
{
std::string x[100];
};
class TestClass
{
public:
std::vector<TestStruct*> testA;
//TestStruct** testA;
TestStruct xxx[100];
TestClass()
{
testA.resize(100, NULL);
//testA = new TestStruct*[100];
for(unsigned int a = 0; a < 100; ++a)
{
testA[a] = new TestStruct;
}
}
~TestClass()
{
for(unsigned int a = 0; a < 100; ++a)
{
delete testA[a];
}
//delete [] testA;
testA.clear();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
char inp;
std::cin >> inp;
{
TestClass ttt[2];
TestClass* bbbb = new TestClass[2];
std::cin >> inp;
delete [] bbbb;
}
std::cin >> inp;
std::cin >> inp;
return 0;
}
使用此代码,程序从大约 1 兆内存开始,上升到超过 8 兆,最后下降到 1.5 兆。额外的 0.5 meg 去哪儿了?我在粒子系统上遇到了类似的问题,但规模为数百兆字节。
我终其一生都无法弄清楚出了什么问题。
顺便说一句,使用数组(我已注释掉)大大减少了浪费的内存,但并没有完全减少它。我希望最后一个 cin 的内存使用量与第一个 cin 相同。
我正在使用任务管理器来监控内存使用情况。
谢谢。