Ir ao conteúdo
  • Cadastre-se

Erro com SIGSEGV


Shoxsz

Posts recomendados

Olá pessoal, estava criando um programa quando me daparei com o seguinte erro:


Tiro::Tiro(SDL_Surface* janela, SDL_Rect* player, int vel)
{

try
{
tiro = new Imagem(janela, player->x, player->y, TIRO_IMAGEM);

this->vivo = false;
this->janela = janela;
this->player = player;
this->vel = vel;

calc_vel = SDL_GetTicks();
}
catch(Erro e)
{
MessageBox(NULL, e.DefErro().c_str(), "Erro", MB_OK);
exit(0);
}
}

A classe tiro tem um construtor que recebe como parametro um ponteiro para uma SDL_Rect, no caso a posição do player, depois ele passa para a classe imagem:


Imagem::Imagem(SDL_Surface* surface, int x, int y,std::string imagem)
{
if(carregar_imagem(imagem) == -1)
throw(Erro("Não foi possivel carregar a imagem " +imagem+ "."));

this->surface = surface;
area.x = x;
area.y = y;
}

que guarda essas posições como se fossem as dele(Claro que elas são atualizadas depois através do ponteiro para a SDL_Rect), consigui ultilizar ate ae de boa, mas quando eu pressiono a tecla para ativar o tiro ele da erro de SIGSEGV:


void Tiro::PullTheTrigger()
{
//Ativa o tiro
vivo = true;

//Atualiza a posição
tiro->Posicionar(player->x, player->y);
}

essa função seta o tiro como vivo para que no próximo loop ele já seja desenhado, mas ao tentar posicionar ele da erro de SIGSEGV, então eu coloquei ao invés da posição do player os valores 0 e 0 nos parametros(apenas para testar), mas agora ele da erro na variavel da classe imagem que tenta atualizar a posição:


void Imagem::Posicionar(int x, int y)
{
area.x = x;
area.y = y;
}

eu debuguei o código e nessa parte dei print na variável area.x e area.y ele fala que nao pode ter acesso ao local de memória delas:

Cannot access memory at address 0xbaadf00d

isso tanto para o 'player' quanto para a 'area' da classe Imagem, sendo que ele ja tinha acessado esses locais antes pois ele colocou valores lá. Antes disso eu tinha acesso aos valores deles.

Então eu tinha os valores dela e na segunda vez que vou utiliza-los eu não tenho mais.

Se alguém puder ajudar eu agradeço.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...