Probleme Erreur de segmentation [Résolu]

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

Votre réponse

6 réponses

Meilleure réponse
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26
3
Merci
Bonjour,

il manque :

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

Cordialement,

Maxime

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Commenter la réponse de coucou747
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012
0
Merci
Bonjour, commence par utiliser ton debugger pour localiser la ligne qui génère le segfault
Commenter la réponse de cs_LA_Tupac
Messages postés
6
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
28 octobre 2011
0
Merci
Merci pour avoir repondu,
La ligne qui pose probleme c'est la ligne
	for(p=0;p<10;p++)
commande2[p]=(char *)malloc(50);
Commenter la réponse de sivas58
Messages postés
14511
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 mai 2019
88
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
6
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
28 octobre 2011
0
Merci
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);
Commenter la réponse de sivas58
Messages postés
6
Date d'inscription
jeudi 30 juin 2011
Statut
Membre
Dernière intervention
28 octobre 2011
0
Merci
c bon ca marcheeeeeee
Merci Maxime

a+
Commenter la réponse de sivas58