1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Unhandled exception - access violation em C++

Discussão em 'Programação' iniciada por Genome_Boy, 3 de Maio de 2008. (Respostas: 5; Visualizações: 1464)

  1. Genome_Boy

    Genome_Boy Power Member

    Boas! Comecei à pouco tempo a fazer umas brincadeiras com c++/opengl mas deparei-me agora com um problema que ainda não consegui resolver.

    Passo a explicar

    Numa instância tenho o seguinte vector inicializado:
    Código:
    cg::Vector2d _velocity;
    e depois a função para retornar:
    Código:
        double* MyPhysics::getVelocity(){
            return _velocity.get();
        }
    Numa outra instância chamo esta função através de:
    Código:
    std::ostringstream link;
                link << "Physics" << _numero;        
            _physics = (MyPhysics*)cg::Registry::instance()->get(link.str());
    cg::Vector2d _velocity = _physics->getVelocity();
    Ao compilar não dá erro nenhum (estou a usar VB2005) porém ao correr recebo a mensagem:
    Código:
    First-chance exception at 0x0045e1b6 in PROJECT_5.exe: 0xC0000005: Access violation reading location 0x00000050.
    Unhandled exception at 0x0045e1b6 in PROJECT_5.exe: 0xC0000005: Access violation reading location 0x00000050.
    Sendo 0x00000050 a posição do velocity da 1ª instância. Ou seja não consigo ler (nem escrever) nessa posição.

    Alguém sabe a que isto se deve?

    Cumps
     
  2. sapropel

    sapropel Power Member

    o que é que o metodo .get() do cg::Vector2d devolve?
    tas a devolver um ponteiro para double no getVelocity() alguma razão para isso?

    porque é que não devolves um cg::Vector2d mesmo?
    é que quando fazes cg::Vector2d _velocity = _physics->getVelocity(); tas a a fazer velocity = double* seja lá qual for o seu valor.

    cg::Vector2d MyPhysics::getVelocity(){
    return _velocity;
    }

    tenta isso.
    senão der mete em debug e vê em que linha é que ele estoira.
     
  3. Genome_Boy

    Genome_Boy Power Member

    Primeiro de tudo obrigado pela resposta.
    Fiz como me indicaste (que me pareceu até a maneira mais fácil ;)), porém continua a dar access violation:

    Código:
    First-chance exception at 0x0045a707 in PROJECT_5.exe: 0xC0000005: Access violation reading location 0x00000040.
    Unhandled exception at 0x0045a707 in PROJECT_5.exe: 0xC0000005: Access violation reading location 0x00000040.
    The program '[2148] PROJECT_5.exe: Native' has exited with code 0 (0x0).
    .

    Alguma ideia?
     
  4. Genome_Boy

    Genome_Boy Power Member

    Ninguém?
     
  5. The_True_Eue

    The_True_Eue Power Member

    O que é o método get em Vector2d? Devolve exactamente o quê?

    E já agora, que função é que está no topo da call stack quando isso morre? É essencial saber onde é que está a dar barraca...
     
    Última edição: 5 de Maio de 2008
  6. Genome_Boy

    Genome_Boy Power Member

    Já não estou a usar o get. Agora a minha função devolve simplesmente o vector, do tipo: return _velocity;

    No call stack tenho isto no topo:
    Código:
    >    PROJECT_5.exe!cg::Vector<cg::Vector2<double>,double,2>::Vector<cg::Vector2<double>,double,2>(const cg::Vector2<double> & v={...})  Line 53 + 0x47 bytes    C++
    Sendo que no debug continua a aparecer:
    Código:
    First-chance exception at 0x0045a827 in PROJECT_5.exe: 0xC0000005: Access violation reading location 0x00000040.
    Unhandled exception at 0x0045a827 in PROJECT_5.exe: 0xC0000005: Access violation reading location 0x00000040.
     

Partilhar esta Página