Jump to content
  • Advertisement
Sign in to follow this  
Hector San Roman Lanza

OpenGL glutMainLoop() causes a segmentation fault in other class...very strange

This topic is 2150 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi!

I have a great problem. I have the principal class Engine.cpp with glutMainLoop(). Too I have the class PhysicsActor with the method GetPosition where occur a segmentation fault. Well, the principal problem is...That I don´t call the PhysicsActor->getPosition method in the program that at no time! When I debug from the line where I create the PhysicActor I discover that glutMainLoop() call to the method PhysicObject->getPosition() automatically, and immediately crash, without entering in  PhysicObject->getPosition() method;

 

The code:

 

 


Engine.cpp

Engine::Engine(int argc, char* argv[])
{
    //ctor
    Initialize(argc, argv);
    glutMainLoop();  // it calls PhysicsActor->getPosition();
    exit(EXIT_SUCCESS);
}

//Destructor
Engine::~Engine()
{
    //dtor
}

void Engine::Initialize(int argc, char* argv[])
{
    using std::cout;
    using std::endl;
    GLenum GlewInitResult;

    InitWindow(argc, argv);

    glewExperimental = GL_TRUE;
    GlewInitResult = glewInit();

    if(GLEW_OK != GlewInitResult)
    {
        cout<<"ERROR: "<<glewGetErrorString(GlewInitResult);
        exit(EXIT_FAILURE);
    }

    std::cout<<"INFO: OpenGL Version: " << glGetString(GL_VERSION) <<std::endl;
/*
    if(GL_VERSION_1_1)  //7938 = OpenGL 1.1.0
    {
        ExitOnError("ERROR: Version de OpenGL incompatible. Actualiza tus drivers");
    }*/
    glGetError();
    glClearColor(.0f, .0f, .0f, .0f);

    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    ExitOnGLError("ERROR: No se puede establecer las opciones de testeo de profundidad");

    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glFrontFace(GL_CCW);
    ExitOnGLError("ERROR: No se pueden establecer las opciones de culling");

    content.rootDirectory = "D:/Users/Hector Trabajo/Documents/Programacion/OpenGL/GekkoEngine_Newton/data/";

    CreateWorld();

}
void Engine::CreateWorld(void)
{
    GameScreen *gs1 = new GameScreen("hola");
    PushGameScreen(gs1);


    Physics *phy = new Physics();
    gs1->AddComponent(phy);


    Camera *cam = new Camera();
    gs1->AddComponent(cam);
    cam->setPosition(glm::vec3(0.0, 2.0, 4.0));


    Cube *cb = new Cube();
    gs1->AddComponent(cb);
    cb->setPosition(glm::vec3(1.2f));
    cb->setScale(glm::vec3(.2f));


    PhysicCube *pc = new PhysicCube();
    gs1->AddComponent(pc)


}

 

PhysicsActor.cpp

 

 

 

glm::vec3 PhysicsActor::getPosition(void)
{
    if (physicObject != NULL)
    {
        return physicObject->getPosition();  // Segmentation fault here, without entering in physicObject->getPosition() method 

    }else{
        return glm::vec3(0.0f);
    }
}

Can anybody help me?

 

 

 

 

Share this post


Link to post
Share on other sites
Advertisement

You are probably corrupting your stack somewhere.

After the crash look at the stack trace and start from the bottom.  Apparently you expect glutMainLoop() to be called but somewhere along the line it is going into a function you don’t expect to be called.

 

I have never used GLUT and don’t know what it is “supposed” to do internally; I leave that understanding up to you.

 

Find the first function on the stack that seems suspicious and go to the caller of that function.  Check for memory overwrites or any possible stack corruption.

 

 

It could also be stack overflow if you have recursive calls somewhere, even if by accident.

 

 

Finally, more information always helps.  Does this happen as soon as you start?  Does it happen after a while?  Does it happen after some event?

Information.

 

 

L. Spiro

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!