Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Segmentation Fault: Onde?


GsXs

Pergunta

Oi pessoal! Meu segundo tópico na sequencia, se eu estiver sendo meio flooder por favor me desculpem, o problema é que as vezes aprender sozinho é meio complicado, e temos que recorrer a algum lugar :blush:

Estou fazendo um programinha que tem que converter números decimais para binários, e até eu salvar o programa ontem estava funcionando tudo bem.Hoje quando eu abri novamente o código, compilei e rodei tomei um susto:

Segmentation fault

Mas como? Procurei na Internet e vi que isso é algo relacionado a alocação de memória, mas meu programa é simples e não tem muitas referências à memória.

Eis o código:

#include <stdio.h>
#include <math.h>
/*prototipo de funcao*/
convertebinario();
/*funcao principal */
int main()
{
convertebinario();
return(0);
}

/*funcao que converte numeros decimais pra binários, onde dec é o número digitado pelo user, q[] é um vetor para armazenar os quocientes e r[] armazena os restos (números binários) */
convertebinario()
{
int dec,i,q[80],r[80];
printf("Digite o numero que serah passado para binario:\n");
scanf("%d", &dec);
  while (dec != 1){  
    q[i]= dec / 2;
    r[i] = dec % 2;
    dec=q[i];
    i++;
    }
}

Alguém tem alguma idéia do que pode ser?

Valeu

Editado por GsXs
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

realmente era correto colocar o tipo da função mas o erro está sendo causado no while.

a condição é que enquanto i for diferente de 1, ele fica no loop e incrementa o valor de i.

O que acontece é que se você não inicializa o i com algo, ele pega qualquer coisa! Assim, se ele começar com 2, vai somando 1 sem parar e o array é estourado...

Ontem deu sorte de não ter dado o erro...

Apenas atribua zero a i que isso não irá mais ocorrer!

Mas não entendi o motivo do loop e dos arrays...

Link para o comentário
Compartilhar em outros sites

  • 0

Mnemonic, Marcelo, obrigado pela ajuda.

Dei um tipo à funçao (int) mas não tinha resolvido o problema. De fato o problema era o i mesmo, obrigado Marcelo.

O loop é para o programa ir calculando (dividindo) os números e obtendo os restos, que são os números binários depois. Como se calcula os nº binários até o quociente ser 1, está é a condição para o programa parar de calcular.

A array q vai pegando os números que devem ser divididos por 2, e a r vai guardando os restos que depois serão mostrados como o número em binário.Tentando explicar melhor, na figura abaixo 39,19,9,4 e 2 seriam da array q e 1,1,1,0 e 0 da r.Depois para mostrar os binários é só exibir o último quociente (1) e os restos de baixo pra cima.

verena1.gif

Como ainda sou iniciante em C provavelmente não fiz da melhor forma possível, pois além de estar começando minha lógica é muito fraca. Se conhecer algum jeito melhor/mais fácil de fazer, eu agradeceria se postasse aqui pra eu ver :blush:

Enfim, consegui terminar :D

Se quiserem ver postei o código do programa na seção de scripts do Viva o Linux, aqui

Obrigado novamente,

Abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...