如何检查Destructor中是否已释放内存?

Cod*_*ile 2 c++ destructor memory-leaks allegro

我有一个简单的坦克大战风格游戏使用allegro开源库.在我的tank类中,我将位图对象的指针数组初始化为0.然后我使用allegro函数create_bitmap创建新对象,该函数分配内存并初始化它.

然后我像往常一样开展业务.

问题是,当我在类析构函数中释放位图内存就像一个好的OO男孩时,我崩溃了程序,因为在这个特定的程序中,allegro库在类之前进行清理(释放它创建的位图对象)超出范围并被销毁.它不会再次将我的指针设置为NULL,所以我无法检查位图是否仍然有效,如果我尝试释放它们,它们将使程序崩溃.

有没有办法解决?如果它们不是NULL,我可以检查有效指针吗?如果在程序中以不同的方式使用类,我怎么能确定释放内存.就目前而言,我基本上是在没有删除的情况下调用new而我不喜欢它.

Unc*_*ens 5

我认为问题不在于allegro会释放位图本身(或者你不需要在退出时释放它们)但是在调用析构函数之前,allegro库已被取消初始化.

int main()
{
    ObjectManagingBitmaps o;
    ...
    return 0;
    //allegro automatically shut down here
} //o destructor invoked here
END_OF_MAIN()
Run Code Online (Sandbox Code Playgroud)

您可以做的是确保首先调用析构函数是使用人工作用域:

int main()
{
    {
    ObjectManagingBitmaps o;
    ...
    } //o destructor invoked here
    return 0;
    //allegro automatically shut down here
} 
END_OF_MAIN()
Run Code Online (Sandbox Code Playgroud)