Langage C// erreur de segmentation

cedji -  
fiddy Messages postés 11069 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

4 réponses

chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,

C'est dommage aussi d'utiliser un tableau d'int alors qu'un tableau de char ferait largement l'affaire.
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
for(i=0;bin[i] != '\0';++i)
               ;

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

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