Langage C// erreur de segmentation

cedji -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. chuka Messages postés 980 Statut Membre 379
     
    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;
    } 
    0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,

    C'est dommage aussi d'utiliser un tableau d'int alors qu'un tableau de char ferait largement l'affaire.
    0
  3. chuka Messages postés 980 Statut Membre 379
     
    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--;
    	}
    }

    @+
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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;
    }
    
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      for(i=0;bin[i] != '\0';++i)
                     ;

      T'avais la flemme décrire strlen ? ^^
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Salut,

        Non, mais j'avais la flemme d'écrire #include <string.h> ;-DDD
        0
      2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        Fainéant :d
        0