Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/08/2006, à 11:56

Maxifoot

Erreur de segmentation

Bonjour,

je voudrais savoir pourquoi ce code, me produit une erreur de segmentation :

void bubbleSort(char **tab, int (*cmp)(void *, void *))
{
  char **p1, **p2;
  for(p1=tab; *p1!=NULL; ++p1)
    for(p2=p1+1; *p2!=NULL; ++p2)
      if((*cmp)(*p1,*p2)>0)
	{
	  char buf[BUFSIZ];
	  strcpy(buf,*p1);
	  strcpy(*p1,*p2);
	  strcpy(*p2,buf);
	}
}

Merci

#2 Le 28/08/2006, à 12:03

Crashforburn

Re : Erreur de segmentation

      strcpy(buf,*p1);

Plante si p1 pointe sur un tableau plus long que buf wink (soit BUFSIZE +1)


Un blog inutile de plus : http://crashforburn.free.fr/dotclear/
[Membre du club des beaux Ubunteros] : http://forum.ubuntu-fr.org/viewtopic.php?pid=535299
Contre la nouvelle année, votons fonacon : http://www.fonacon.net/

Hors ligne

#3 Le 28/08/2006, à 12:16

Maxifoot

Re : Erreur de segmentation

Crashforburn a écrit :
      strcpy(buf,*p1);

Plante si p1 pointe sur un tableau plus long que buf wink (soit BUFSIZE +1)

Ca se corrige comment ?

#4 Le 28/08/2006, à 12:50

Crashforburn

Re : Erreur de segmentation

strncpy(buf;*p1,BUFSIZE);


Un blog inutile de plus : http://crashforburn.free.fr/dotclear/
[Membre du club des beaux Ubunteros] : http://forum.ubuntu-fr.org/viewtopic.php?pid=535299
Contre la nouvelle année, votons fonacon : http://www.fonacon.net/

Hors ligne

#5 Le 28/08/2006, à 12:58

Maxifoot

Re : Erreur de segmentation

Crashforburn a écrit :

strncpy(buf;*p1,BUFSIZE);

Pour les autres, j'ai fait comme ceci :

void bubbleSort(char **tab, int (*cmp)(void *, void *))
{
  char **p1, **p2;
  for(p1=tab; *p1!=NULL; ++p1)
    for(p2=p1+1; *p2!=NULL; ++p2)
      if((*cmp)(*p1,*p2)>0)
	{
	  char buf[BUFSIZ];
	  strncpy(buf,*p1,BUFSIZ);
	  if((*p1 = malloc(strlen(*p2)+1)) == NULL)
	    return;
	  strcpy(*p1,*p2);
	  if((*p2 = malloc(strlen(buf)+1)) == NULL)
	    return;
	  strcpy(*p2,buf);
	}
}

C'est comme ça ? ou il faut faire autrement ?

#6 Le 28/08/2006, à 20:29

Crashforburn

Re : Erreur de segmentation

ben utiliser strncpy(); ça revient au même ^^

Sinon ça mfonctionne ?


Un blog inutile de plus : http://crashforburn.free.fr/dotclear/
[Membre du club des beaux Ubunteros] : http://forum.ubuntu-fr.org/viewtopic.php?pid=535299
Contre la nouvelle année, votons fonacon : http://www.fonacon.net/

Hors ligne

#7 Le 28/08/2006, à 21:39

Visu@lSt@tion

Re : Erreur de segmentation

Pourquoi avoir mis une poste incrémentation alors que tu verifies p1 et que tu travails sur p1+1 ??? hmm


[ Site Web - Serveur Perso ]
[ Windows Xp Pro,Windows Serveur 2003, Gentoo 2006.1, Ubuntu 7.04 (Apache2, Php 5 & MySQL5||ORACLE) ]
[ "Un interface chaise clavier défaillant est équivalent à un ordinateur vérolé à la base !" ]

Hors ligne