IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Erreur de segmentation


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Erreur de segmentation
    Bonjour,

    Premièrement ne vous inquietez pas je me suis pas trompé de forum ^^

    Nous voyons en cours actuellement la récursivité, je me suis donc essayé à l'implémenter en Pascal avec FreePascal. J'ai tenté d'implémenter le tri rapide ou QuickSort mais je trouvais toujours à l'execution ce code-ci : erreur de segmentation
    après plusieurs recherches, je ne voyais pas où mon algorithme buggait, j'ai donc tenté d'implémenter une fonction plus simple utilisant la récursivité comme la fonction factorielle. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    program factrecursif;
     
    function fact(x:Integer):Integer;
    begin
    if (x=1) and (x=0) then
    fact:=1
    else
    fact:=x*fact(x-1)
    end;
     
    var x:Integer;
    begin
    writeln('combien?');
    readln(x);
    writeln(fact(x))
    end.
    Et la on m'affiche erreur de segmentation alors que je compile très bien. Ne comprenant d'ou venait l'erreur j'ai tenté de le coder en C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int fact(int x)
    {
    if (x==1 and x==0)
    return 1;
    else
    return x*fact(x-1);
    }
     
    int main()
    {
    int x,resultat;
    printf( "combien?\n");
    scanf("%d",&x);
    resultat=fact(x);
    printf(" %d ",resultat);
    }
    Et la de nouveau pareil erreur de segmentation malgré une compilation encore une fois OK.
    Je ne comprend pas ou est le problème que ce soit en Pascal et en C dans mon code...
    Pour information, j'utilise Ubuntu 9.04 et je suis sous KDE. Je ne sais pas si cela vient peut etre de la...Je suis assez desespéré^^

    Merci de m'eclairer

    Jerem6464

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Jerem6464 Voir le message
    Et la de nouveau pareil erreur de segmentation malgré une compilation encore une fois OK.
    Je ne comprend pas ou est le problème que ce soit en Pascal et en C dans mon code...
    Tout d'abord, il n'y a pas d'opérateur ni de mot clé "and" en C, c'est &&.

    En outre le test sur la condition d'arrêt de la récursion n'est pas bon, ce n'est pas if (x==1 && x==0) mais if (x==1 || x==0). En effet, la fonction doit retourner 1 si x vaut 0 ou 1.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 432
    Points : 593
    Points
    593
    Par défaut
    Citation Envoyé par gl Voir le message
    Tout d'abord, il n'y a pas d'opérateur ni de mot clé "and" en C, c'est &&.

    En outre le test sur la condition d'arrêt de la récursion n'est pas bon, ce n'est pas if (x==1 && x==0) mais if (x==1 || x==0). En effet, la fonction doit retourner 1 si x vaut 0 ou 1.
    L'erreur de segmentation = stack overflow parce que la récursivité ne s'arrête jamais.

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo