Probleme Erreur de segmentation [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
28 octobre 2011
-
Messages postés
6
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
28 octobre 2011
-
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

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
Bonjour,

il manque :

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

Cordialement,

Maxime
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Bonjour, commence par utiliser ton debugger pour localiser la ligne qui génère le segfault
Messages postés
6
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
28 octobre 2011

Merci pour avoir repondu,
La ligne qui pose probleme c'est la ligne
	for(p=0;p<10;p++)
commande2[p]=(char *)malloc(50);
Messages postés
15021
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 avril 2021
94
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...
Messages postés
6
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
28 octobre 2011

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);
Messages postés
6
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
28 octobre 2011

c bon ca marcheeeeeee
Merci Maxime

a+