Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Localhost

Resolvido - [Allegro] Segmentation fault

Recommended Posts

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.