c++ - 为什么我不能删除用new创建的Ogre OverlaySystem?

标签 c++ pointers access-violation ogre

我正在为我的应用程序使用 Ogre 框架。当应用程序关闭时,我关闭 Ogre 并删除 Ogre::Root 对象。之后我需要删除一些指针,因为我为每个用作接口(interface)的 Ogre 类都有自己的类。我只是删除指向我的类(class)的指针。存在于 Ogre 元素的指针不会被删除,因为 Ogre 关闭会处理它(或者至少根据文档应该如此)。

问题出在 OverlaySystem 类中。这是头文件:

class OverlaySystem {
public:
    OverlaySystem();
    Ogre::OverlaySystem* getOverlaySystem() const;
    ~OverlaySystem();

private:
    Ogre::OverlaySystem* overlaySystem;
};

这是源文件:

OverlaySystem::OverlaySystem() :
overlaySystem(new Ogre::OverlaySystem()) {
}

Ogre::OverlaySystem* OverlaySystem::getOverlaySystem() const {
    return this->overlaySystem;
}

OverlaySystem::~OverlaySystem() {
    delete this->overlaySystem;
}

我的理解如下:因为我为 Ogre::OverlaySystem 对象动态分配内存,所以我必须删除释放分配内存的指针,这是我在析构函数中所做的(或者至少我认为我会这样做)。

问题是:当我的应用程序关闭时,我得到一个删除 Ogre::OverlaySystem 对象的异常,因为访问冲突表明我无法读取位置 0x00000042。下面是一个失败的例子(对德语很抱歉,但我现在无法更改):

Access Violation Exception

唯一的地址变化是异常地址本身,这是第一个。

我现在花了几个小时来寻找我的失败或失败的原因,但我找不到任何帮助。如果有人能帮我解决这个问题,那就太好了。

最佳答案

发现错误!我以为我已经这样做了,但经过多次更改后一定有一些混淆。

解决方法: Ogre::OverlaySystem 的析构函数必须在 Ogre::Root 的析构函数被调用之前被调用。

关于c++ - 为什么我不能删除用new创建的Ogre OverlaySystem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35599149/

相关文章:

c++ - openMP - 与 for 循环和私有(private)并行化

c++ - Aero Snap 不适用于我的应用程序

pointers - 如何返回自定义错误而不导致 nil 值出现问题

winforms - 来自组合的 AccessViolationException : Attempted to read or write protected memory

c# - (C#) 从 C++ DLL 获取 char ** 时出现 AccessViolationException

c++ - 为什么我无法构建此正则表达式

java - Java 的 C++ 解析器/模型

c - 不兼容的指针类型 - C

c - c++ 中奇怪的函数转换(void (**)())

Haskell 应用程序崩溃 : Segmentation fault/access violation in generated code