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 (segmentation fault) dans une fonction


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Erreur (segmentation fault) dans une fonction
    Bonjour,

    Il y a un petit problème dans la fonction lancer_requete que je ne parviens pas a trouver. C’est compilable mais dès que je commence à écrire, il sort avec une erreur (j’utilise Dev 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct Spool{
            char ch[30];
            int p;
            int etat;
            struct Spool*suivant;
            }*sp;
    sp lancer_requete(sp req)
    { 
      printf("nom du document");
      scanf("%s",req->ch);
      printf("priorete de la requete");
      scanf("%d",req->p);
      printf("etat");
      scanf("%d",req->etat);
      return(req);
    }
    void imprimer(sp req)
    {  sp A,courant;
    courant=req;
    while(courant->suivant)
    { if(courant->etat==1)
     {
                           A=courant;
                           courant=courant->suivant;
                           }
                           }
    courant=req;
    while(courant)
    if ((courant->etat==1)&&(courant->p < req->p)) req=courant;courant=courant->suivant;
    printf("%s a imprimer",req->ch);
    }
    main()
    { sp y;char f;
    printf("[A]:inserer une requete dans le spool\n[I]:imprimer\n[Q]:Exit\n");
     do
     {
     scanf("%c",&f);switch (f)
    {
     case 'L':  printf("[A]:inserer une requete dans le spool\n[I]:imprimer\n[Q]:Exit\n");
                           break;
     case 'A': y=lancer_requete(y);
                 break;
     case 'I': imprimer(y);
                 break;
                 }
                   }while(f!='Q');
     getch();
    }
    Merci.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Ca compile mais avec des warnings.....

    Mettre sp comme un pointeur sur une structure n'est pas du tout une bonne idée. Tu déclares un pointeur dans le main, mais la structure pointée n'existe pas. Dés que tu essayes d'accéder aux champs de cette structure imaginaire, hop ! segmentation fault !

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 041
    Points
    33 041
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Comme ci-dessus, évite de créer un type pointeur, c'est vraiment pas clair, source d'erreur et inutile dans ton cas.
    Le sp y (paye ton nom explicite à souhait !!) est donc un sp, qui est un pointeur sur structure (faut suivre... c'est pas commun), qui est utilisé non alloué depuis le main.

Discussions similaires

  1. Erreur : Segmentation Fault dans un test de primalité
    Par oxygar dans le forum Débuter
    Réponses: 5
    Dernier message: 25/03/2012, 18h42
  2. Erreur "SELECT INTO" dans une fonction
    Par mercure07 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 20/02/2009, 11h34
  3. Réponses: 1
    Dernier message: 26/11/2008, 17h36
  4. Erreur d'argument dans une fonction
    Par rouliane dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/12/2006, 11h52
  5. [8i][PL/SQL] erreur avec lpad dans une fonction
    Par sali dans le forum Oracle
    Réponses: 3
    Dernier message: 16/03/2006, 06h22

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