Probleme Erreur de segmentation

Résolu
sivas58 Messages postés 6 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 28 octobre 2011 - 28 oct. 2011 à 16:39
sivas58 Messages postés 6 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 28 octobre 2011 - 28 oct. 2011 à 18:10
Bonjour a tous;

J'ai besoins d'aide sur une erreur de segmentation.

int decoupeLignePipe(char *chaine,char **commande1,char **commande2)
{
int p,i,u,taille;
int e=0;
int j=0;
int r=0,k=0;
int pipe=0;
for(i=0;i<10;i++) 
commande1[i]=(char *)malloc(50);
for(p=0;p<10;p++)
commande2[p]=(char *)malloc(50);
while(chaine[e]!=0)
{
while((chaine[e]>='a' && chaine[e]<='z')||(chaine[e]>='0' && chaine[e]<='9')||chaine[e]=='_'||chaine[e]=='.'|| chaine[e]== '-' || chaine[e]== '|')
{
if(chaine[e]=='|')
pipe=1;
if(pipe==1)
{
commande2[r][j]=chaine[e];
e++;
j++;			
}	
else
{	
commande1[k][j]=chaine[e];
e++;
j++;
}
}
while(chaine[e]==' ')e++;
if(pipe==1)
{
r++;
j=0;
}
else
{
k++;
j=0;
}	
}
/*commande1[k]=NULL;*/
commande2[r]=NULL;
taille=k+r;
return taille;
}
int main(int args,char **arg,char **envp)
{		
int p;
int k;
char chaine[256];
char **commande1;
char **commande2;
int taille=0;
affichePrompt(envp);
lit(chaine);
  	printf("commande saisie  : %s\n",chaine);
int taille=decoupeLignePipe(chaine,commande1,commande2);
for(p=0;p<taille;p++) {// pour tester cond
printf("lu : %s\n",commande1[p]);	
  		}
}

Le probleme je ne comprend pas pourquoi ya cette erreur :

Program received signal SIGSEGV, Segmentation fault.
0x08048749 in decoupeLignePipe (chaine=0xbffff20c "sd s|sd ",
commande1=0xbffff254, commande2=0x15cf80) at minishelltest.c:75
75 commande2[p]=(char *)malloc(50);}

6 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 oct. 2011 à 18:02
Bonjour,

il manque :

char **commande1 = malloc(10 * sizeof(char *));
char **commande2 = malloc(10 * sizeof(char *));

Cordialement,

Maxime
3
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
28 oct. 2011 à 16:53
Bonjour, commence par utiliser ton debugger pour localiser la ligne qui génère le segfault
0
sivas58 Messages postés 6 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 28 octobre 2011
28 oct. 2011 à 16:56
Merci pour avoir repondu,
La ligne qui pose probleme c'est la ligne
	for(p=0;p<10;p++)
commande2[p]=(char *)malloc(50);
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
28 oct. 2011 à 17:21
Hello,
Un SegFault arrive en cas de débordement de capacité mémoire. Du coup, ça veut dire que commande2 n'est pas assez grand...voire même qu'il n'est pas alloué...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sivas58 Messages postés 6 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 28 octobre 2011
28 oct. 2011 à 17:58
J'ai essayer d'augmenter la taille de commande2 mais l'erreur est toujours presente.
J'ai allouer commande2 avec malloc :
	for(p=0;p<10;p++)
commande2[p]=(char *)malloc(50);
0
sivas58 Messages postés 6 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 28 octobre 2011
28 oct. 2011 à 18:10
c bon ca marcheeeeeee
Merci Maxime

a+
0
Rejoignez-nous