【发布时间】:2013-01-11 10:18:54
【问题描述】:
我正在使用 stdlib.h 和 crtdbg.h 中的 _CrtDumpMemoryLeaks(); 来检测内存泄漏,但我注意到我的代码中有一些奇怪的地方。
如果我这样做:
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?
【问题讨论】:
-
因为你删除的是things,而不是指针,所以当你删除它时,哪个指针指向某个东西并不重要。换句话说,通过
anotherPointer删除与通过charPointer删除是一样的,你应该只做其中一个。 -
好的。是整个问题都变了还是我变了?
标签: c++ memory-leaks memory-leak-detector