Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Localhost

Resolvido - [Allegro] Segmentation fault

Mensagens Recomendadas

Localhost

Olá pessoal.

Bem eu já há muito tempo que me quero iniciar na programação de jogos e até já fiz algumas coisitas em allegro, só que fiz em windows.

Agora que estou em Linux instalei a lib e tal mas quando vou a chamar a função blit dá-me um segmentation fault. Tenho a certeza de que carreguei a imagem correctamente e de que o path para a imagem está correcta.

Alguém tem o mesmo problema ou pode explicar-me porque é que isto acontece?


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cynary

Li algures que no Windows, ultrapassar os limites de arrays por vezes é permitido (isto não significa que os programas podem basicamente mexer na memória dos outros? ou o windows simplesmente aloca memória extra para os programas, para compensar programadores maus? xD).

Mas no Linux, não podes fazer isso ...

Nunca usei biblioteca Allegro, no entanto, da documentação deles, vi que estás a usar dois ponteiros, que podem muito bem ser arrays (só vi a descrição da função blit) ...

Vê se, por exemplo, não estás a fazer um overflow na variável de destino, ou a ler demais da variável de origem, isso faria com que o programa tentasse a aceder a memória fora da alocada para ele, causando um segmentation fault.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Li algures que no Windows, ultrapassar os limites de arrays por vezes é permitido (isto não significa que os programas podem basicamente mexer na memória dos outros? ou o windows simplesmente aloca memória extra para os programas, para compensar programadores maus? xD).

Ah? :-X

Eu simplesmente carrego a imagem e tento desenhá-la. Não percebo como posso "sobrecarregar" o ponteiro.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cynary

Como disse, nunca usei a Allegro, e a minha análise foi de uma leitura muito superficial da documentação acerca da função blit.

Para carregares a imagem, tens de a guardar na memória, certo?

Os ponteiros podem corresponder a zonas de memória alocada com um certo tamanho, como os arrays, e quando tentas ler ou escrever fora dessa zona, dá-te um segmentation fault (no windows, estes são atenuados muitas vezes pelo que tinha lido, o problema é que não me lembro onde :/).

Pode ser isso que está a acontecer.

Mas só faz sentido se algures no programa tens de especificar algo acerca do tamanho máximo da imagem.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

O problema já foi resolvido. Eu é que já não me lembrava bem e não se pode utilizar a função blit para estes efeitos mas sim a função draw_sprite.

Obrigado, Cynary  :thumbsup:


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.