C++ 重复释放堆区内存
考虑下面情况:
typedef struct STest
{
int t;
}Test, *PTest;
PTest CreateTest()
{
PTest self = new STest;
if(self == nullptr)
{
return nullptr;
}
return self;
}
void ReleaseTest(PTest self)
{
if(self != nullptr)
{
delete self;
self = nullptr;
}
}
main.cpp
int main()
{
PTest test = CreateTest();
Release(test);
if(test != nullptr)
{
delete test;
}
return 0;
}
在 main.cpp 的 delete test 处会发生重复释放内存问题。应该把 ReleaseTest 改为传引用(指针的引用)或传指针(指针的指针)的方式。
void ReleaseTest(PTest& self)
{
if(self != nullptr)
{
delete self;
self = nullptr;
}
}
这样就不会出错