我正在使用_CrtDumpMemoryLeaks(); 从 stdlib.h 和 crtdbg.h 来检测内存泄漏,但我注意到我的代码中有一些奇怪的地方。
如果我做:
int _tmain(int argc, _TCHAR* argv[])
{
MyClass* myClass = new MyClass();
_CrtDumpMemoryLeaks(); //I get a memory leak warning
}
但是,如果我这样做:
class MyClass
{
public:
char* NewChar();
};
char* MyClass::NewChar()
{
char* test = new char[100];
return test;
}
MyClass myClass; //Globally declared
int _tmain(int argc, _TCHAR* argv[])
{
char* charPointer = myClass.NewChar();
_CrtDumpMemoryLeaks(); //No warnings
}
自从我的程序退出(就在_CrtDumpMemoryLeaks()之后)并且仍然有一个未删除的新字符后,我不应该收到警告吗?
如何检测这些内存泄漏?
另外,使用上面的相同示例,如果我添加代码:
char* anotherPointer = charPointer; //previously filled
delete[] anotherPointer;
这会从类内部删除新的字符以防止内存泄漏,还是我也应该在charPointer上调用 delete ?