Posez votre question Signaler

Langage C// erreur de segmentation

cedji - Dernière réponse le 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
Lire la suite 

Langage C// erreur de segmentation »

7 réponses
Réponse
+0
moins plus
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;
} 
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

C'est dommage aussi d'utiliser un tableau d'int alors qu'un tableau de char ferait largement l'affaire.
Ajouter un commentaire
Réponse
+0
moins plus
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--;
	}
}

@+
Ajouter un commentaire
Réponse
+0
moins plus
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;
}
fiddy- 10 janv. 2009 à 22:54
for(i=0;bin[i] != '\0';++i)
               ;

T'avais la flemme décrire strlen ? ^^
lami20j- 10 janv. 2009 à 22:58
Salut,

Non, mais j'avais la flemme d'écrire #include <string.h> ;-DDD
fiddy- 10 janv. 2009 à 23:04
Fainéant :d
Ajouter un commentaire
Ce document intitulé « Langage C// erreur de segmentation » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?