【发布时间】:2010-12-12 07:39:22
【问题描述】:
我有一个使用 allegro 开源库的简单坦克战争风格游戏。在我的坦克类中,我将指向位图对象的指针数组初始化为 0。然后我使用 allegro 函数 create_bitmap 创建新对象,该函数分配内存并对其进行初始化。
然后我照常工作。
问题是,当我像一个优秀的 OO 男孩一样去释放类析构函数中的位图内存时,我使程序崩溃了,因为在这个特定的程序中,allegro 库进行了它的清理(它释放了它创建的位图对象)在类超出范围并被销毁之前。它不会再次将我的指针设置为 NULL,所以我无法检查位图是否仍然有效,如果我尝试释放它们,它们会使程序崩溃。
有没有办法解决这个问题?如果它们不为 NULL,我可以检查有效的指针吗?如果在程序中以不同的方式使用该类,我如何确定已释放内存。就目前而言,我基本上是在调用 new 而不删除,我不喜欢它。
【问题讨论】:
-
“顺便说一句,Allegro 给出了删除资源的 destroy_bitmap 命令” - 那么为什么不在你的 dtor 中调用 destroy_bitmap 呢?
-
我一直在尝试编辑 OP 说我知道。这就是我在 dtor 中使用的。问题是,如果 allegro 已经释放了位图,当我将释放的指针传递给 destroy_bitmap 命令时,它会因未分配内存而崩溃并出现非法访问错误,并且 allegro 显然没有跟踪这一点。
-
alleg.sourceforge.net/stabledocs/en/alleg009.html#create_bitmap 上的 allgro 文档表明,使用 create_bitmap 分配的内存是您释放(使用 destroy_bitmap)的责任。
-
@Bill 我正试图释放它,但 allegro 不让我这样做,因为它认为我忘记了并自己做。
标签: c++ memory-leaks destructor allegro