Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在另一个对象内创建对象会更改';这'; 我有C++类ReNeReuleWIDGET,它有一个In()方法。在使用Visual Studio 2012编译并运行它之后,我在一个非常奇怪的位置发生了崩溃: bool RendererWidget::init(Renderer *renderer) { /* ... */ mRenderer = renderer; mViewport = new Viewport(); return mRenderer->init(mViewport); }_C++_Visual Studio 2012_Crash - Fatal编程技术网

在另一个对象内创建对象会更改';这'; 我有C++类ReNeReuleWIDGET,它有一个In()方法。在使用Visual Studio 2012编译并运行它之后,我在一个非常奇怪的位置发生了崩溃: bool RendererWidget::init(Renderer *renderer) { /* ... */ mRenderer = renderer; mViewport = new Viewport(); return mRenderer->init(mViewport); }

在另一个对象内创建对象会更改';这'; 我有C++类ReNeReuleWIDGET,它有一个In()方法。在使用Visual Studio 2012编译并运行它之后,我在一个非常奇怪的位置发生了崩溃: bool RendererWidget::init(Renderer *renderer) { /* ... */ mRenderer = renderer; mViewport = new Viewport(); return mRenderer->init(mViewport); },c++,visual-studio-2012,crash,C++,Visual Studio 2012,Crash,函数被传递给一个非nullptr渲染器,然后创建一个视口对象,该对象具有一个简单的构造函数。问题是在mViewport=newviewport()之前;,this和mRenderer有一些定义的值,之后,这将更改为完全不同的值,mRenderer将更改为0x0,这将导致稍后的崩溃。可能的原因是什么 根据评论建议进行编辑: 完全初始化(): 向我们展示您在调试模式下编译的“一些定义值”?这通常发生在发布模式中,我指的是有效的、非空的PTR地址。我是在调试模式下编译的。问题在于您没有向我们展示的代码

函数被传递给一个非nullptr渲染器,然后创建一个视口对象,该对象具有一个简单的构造函数。问题是在mViewport=newviewport()之前;,this和mRenderer有一些定义的值,之后,这将更改为完全不同的值,mRenderer将更改为0x0,这将导致稍后的崩溃。可能的原因是什么

根据评论建议进行编辑:

完全初始化():


向我们展示您在调试模式下编译的“一些定义值”?这通常发生在发布模式中,我指的是有效的、非空的PTR地址。我是在调试模式下编译的。问题在于您没有向我们展示的代码。两个词:堆损坏。
bool RendererWidget::init(Renderer *renderer)
{
    Engine *engine = Engine::instance();

    if (renderer)
    {
        mRenderer = renderer;
        mOwnsRenderer = false;
    }
    else
    {
        mRenderer = engine->createRenderer();
        if (!mRenderer)
            return false;

        mOwnsRenderer = true;
    }

    mViewport = new Viewport();

    // this and mRenderer are already changed here, mViewport is a valid pointer
    mViewport->initFromOther(reinterpret_cast<HWND>(winId()));

    // crash
    return mRenderer->init(mViewport, engine->getMainRenderer());
}
Viewport::Viewport()
    : mHandle(NULL)
    , mRenderer(nullptr)
    , mAudio(nullptr)
    , mInput(nullptr)
    , mOwnsHandle(true)
{
}

void Viewport::initFromOther(SystemWndHandle hWnd)
{
    mHandle = hWnd;
    mOwnsHandle = false;
}