Langage C// erreur de segmentation

Fermé
cedji - 10 janv. 2009 à 11:21
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 janv. 2009 à 23:04
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 samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
10 janv. 2009 à 14:24
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
10 janv. 2009 à 17:18
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 samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
10 janv. 2009 à 22:32
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
10 janv. 2009 à 22:42
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
10 janv. 2009 à 22:54
for(i=0;bin[i] != '\0';++i)
               ;

T'avais la flemme décrire strlen ? ^^
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
10 janv. 2009 à 22:58
Salut,

Non, mais j'avais la flemme d'écrire #include <string.h> ;-DDD
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
10 janv. 2009 à 23:04
Fainéant :d
0