Feeds:
Posts
Comments

Archive for December, 2011

Olhe e aprenda

Isso é mais do que comum com quem está iniciando em C, ou com quem faz computação ou curso que paga C. Segfault é tipo o pesadelo de todo aluno de estrutura de dados quando ele tem que fazer seus trabalhos em C. Entretanto, ao contrário do que muitos pensam este não é um erro insolúvel, ou mistico. O segfault quer dizer simplesmente que você é noob em C e sim, você fez merda! Agora pare de programar, olhe o seu código e tente descobrir onde e porque essa mensagem, chamada carinhosamente de mensagem da morte, apareceu na hora de executar o seu programa que compilou bonito em seu pc.

Você talvez não tenha descoberto e seu código deve ter vários módulos,  cada .c várias linhas e você está entrando em desespero. Se acalme, eu vos apresento Valgrind.
O valgrind é a ferramenta que todo programador C deve conhecer. Por que? Ora, ora, porque ele te mostra detalhadamente a merda que você andou fazendo na hora de manusear com a memoria. Sim, o segfault foi, provavelmente alguma falha sua usando malloc, ou ponteiros.
Eu não vou mostrar como se usa o valgrind, nem vou dizer onde baixá-lo, vou usar a metodologia que meus professores da graduação usavam com minha turma, Se vira sozinho, aprenda, dê seus pulos!
Mas antes de terminar vou dizer o que certa vez aconteceu comigo programando em C. Eu precisava fazer um trabalho de algoritmos avançados, um Grasp pra um caixeiro viajante. E eis que dias antes de entregar o trabalho o segfault me bate a porta. Como na época era noob level 2 (não sabia pn) usava o método ninja (e sofrível) do debug a lá printf. Em uma dessas printadas na tela, acrescentei um printf em dada linha e magicamente o segfault sumiu. Pensei comigo, é macumba? Mas não tem nada a ver com macumba, outra vez não vou dizer o que era, HAHA, mas busquem sobre contexto de memoria e vão descobrir.
Boa sorte e por favor usem o valgrind, mas não só pra corrigir seus erros ao lidar com memoria, mas pra se certificar que você fez o certo, aprendam com ele como manusear memoria e ponteiros em C, não façam os foguetes caírem na casa de gente de bem, blz =P.

Referências

[1]  http://valgrind.org/docs/manual/quick-start.html

Read Full Post »