即使没有删除对象指针,也可以访问它

时间:2014-08-19 16:32:32

标签: c++ opengl visual-c++ c++11 crash

我的程序每次到达render(Mesh* mesh)函数时都会崩溃,如果我只有std::cout,它会正常工作,但是当我尝试访问{{1}中的指针时却没有}类。我已经将RenderingEngine放在相机和窗口的析构函数中并且它们没有被调用,并且只有在构造cout之后才调用渲染函数,所以我不确定为什么它不会让我访问指针

它给我的错误是:

  

GameCreatorEngine.exe中0x0101F722处的未处理异常:0xC0000005:访问冲突读取位置0x00000000。

RenderingEngine

-

#include "RenderingEngine.h"
#include "ShaderManager.h"
#include "Camera.h"
#include "Mesh.h"


#include <iostream>
using namespace std;

RenderingEngine::RenderingEngine(WindowEngine* window)
{
    this->window = window;
    main_camera = new Camera(window->getWidth() / window->getHeight(), 100.0f, 0.1f, 1000.0f);
    shaders     = new ShaderManager();
    bound_program = shaders->getProgram(shaders->DEFAULT);
    window->setCursorVisability(false);

    cout << "renderer created" << endl;
}


RenderingEngine::~RenderingEngine()
{
    delete main_camera;
    delete shaders;
    delete window;

    cout << "renderer deleted" << endl;
}

void RenderingEngine::setCamera(Camera* camera)
{
    main_camera = camera;
}

ShaderProgram* RenderingEngine::getBoundProgram()
{
    return bound_program;
}

void RenderingEngine::render(Mesh* mesh)
{
    if (main_camera == nullptr) // crashes
    {
        cout << "weeeeeeeeeeeeeyl" << endl;
    } 

    main_camera->print(); // crashes

    window->clearScreen(); // crashes

    window->swapBuffer(); // crashes

    cout << "WHY IS THIS WORKING" << endl; // works

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // WORKS


}

void RenderingEngine::render(ShaderProgram* program, Mesh* mesh)
{
    window->clearScreen();
    {
        glUseProgram(program->getProgramID());
        glBindVertexArray(*mesh->getVAO_ID());

        glEnableVertexAttribArray(0);
        glEnableVertexAttribArray(1);
        glEnableVertexAttribArray(2);
        {
            main_camera->update(window);
            program->addUniform4m("mvp", main_camera->getModelViewProjection(main_camera->getTransformationMatrix()));

            glDrawElements(GL_TRIANGLES, *mesh->getIndicesCount(), GL_UNSIGNED_INT, 0);
        }
        glDisableVertexAttribArray(0);
        glDisableVertexAttribArray(1);
        glDisableVertexAttribArray(2);

        glBindVertexArray(0);
        glUseProgram(0);
    }
    window->swapBuffer();
}

3 个答案:

答案 0 :(得分:2)

如果它在if (main_camera == nullptr) // crashes上崩溃,那么因为“this”为空。

答案 1 :(得分:1)

看起来你的RenderingEngine指针是nullptr

答案 2 :(得分:0)

看起来我想念这个 - &gt;出

void GameObject::setRenderingEngine(RenderingEngine* renderer) 
{
        renderer = renderer; // assigning to self
}