Langage C// erreur de segmentation

Bonjour,
voila je dois écrire un programme calculant le codage binaire d'un nombre entier; le problème c'est que quand je simule, il apparait une erreur de segmentation; je pense que cela est dû au nombre "n" qui correspond à la taille du tableau t; je l'ai défini comme un pointeur car il n'est pas fixé
voila les lignes de code

/*Changement de base de numérisation*/

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

void CalculBinaire (int a, int*t, int*n)
{
int b;
*n=0;
while (a>=2)
{
b=a/2;
if(a%2==0)
{
t[*n]=0;
*n++;
}
else
{
t[*n]=1;
*n++;
}
a=b;
}
}

void Afficher (int*t,int*n)
{
int i;
printf("\n En codage binaire, on a:\n");
for(i=0;i<=*n;i++)
{
printf("%d",t[i]);
}
}

int main (void)
{
int a;
int*t;
int*n;
printf("Veuillez saisir le nombre que vous voulez afficher en codage binaire:");
scanf("%d",&a);

t=(int*)malloc(n*sizeof(int));

CalculBinaire(a,t,n);

Afficher(t,n);

return 0;

}

merci de votre aide
Configuration: Windows XP
Firefox 3.0.5

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,
    je comprends pas pourquoi tu mets le dans la fonction void CalculBinaire (int a, int*t, int*n) un argument int *n....
    et en effet cet affectation te retournera un segment fault...
    t=(int*)malloc(n*sizeof(int)); (Que vaut n???)
    Voici le code qui devrait fonctionner...
    J'espere ca pourras t'aider!!!
    @+
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    
    int CalculBinaire (int a, int*t)
    {
    int b;
    int nb=0;
    	while (a>0)
    	{
    	 b=a/2;
    		if(a%2==0)
    		{
    			t[nb]=0;
    			nb++;
    		}
    		else
    		{
    			t[nb]=1;
    			nb++;
    		}
    	 a=b;
    	}
    return nb;
    }
    
    void Afficher (int*t,int n)
    {
    printf("\n En codage binaire, on a:\n");
    	while(n>=0)
    	{
    		printf("%d",t[n]);
    		n--;
    	}
    }
    
    int main ()
    {
    int a;
    int t[255];
    int n;
    printf("Veuillez saisir le nombre que vous voulez afficher en codage binaire:");
    scanf("%d",&a);
    n=CalculBinaire(a,t);
    Afficher(t,n);
    getchar();
    return 0;
    } 
    1. Contributeur
      Salut,

      C'est dommage aussi d'utiliser un tableau d'int alors qu'un tableau de char ferait largement l'affaire.
      1. Salut,
        C'est vrai.....avec un truc dans ce genre, plus besoin de tableau et tout le tralala....
        void CalculBinaire (int a)
        {
        printf("\n En codage binaire, on a:\n"); 
        int b;
        int nb=8;
        	while (nb>0)
        	{
        	b=a&0xFF;
        	b=b>>7;
        	printf("%d",b);
        	a=a<<1;
        	nb--;
        	}
        }

        @+
        1. Modérateur
          Salut,

          Autre version
          void dec2bin(char *bin,int nb){
                 int i,j,k,tmp;
          
                 for(i=0;nb != 0;nb >>= 1){
                         if(nb & 01)
                                 bin[i++] = '1';
                         else
                                 bin[i++] = '0';
                 }
                 bin[i]='\0';
          
                 for(j=0,k=i-1;j<k;++j,--k){
                         tmp=bin[j];
                         bin[j]=bin[k];
                         bin[k]=tmp;
                 }
          } 

          et pour conversion binaire vers décimal
          unsigned bin2dec(char *bin){
                 int i,j;
                 unsigned dec;
          
                 for(i=0;bin[i] != '\0';++i)
                         ;
                 for(j=0,dec=0;j<i;++j)
                         dec = dec + ((bin[j] - '0') << (i-j-1));
                 return dec;
          }
          
          1. Contributeur
            for(i=0;bin[i] != '\0';++i)
                           ;

            T'avais la flemme décrire strlen ? ^^
          2. Modérateur
            @fiddySalut,

            Non, mais j'avais la flemme d'écrire #include <string.h> ;-DDD