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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Erreur de segmentation
    Salut à tous,
    Je suis débutant C et je suis face à un petit problème pendant l'execution de mon mini prog.
    Gdb me dit que ca segfault tout à la fin du prog:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    0x08048997 in main () at main.c:119
    119     }
    Je ne vois pas pourquoi?!
    Merco

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Par défaut
    Salut ,

    Tu peu placer ton code ici stp ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    OUPS
    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
    54
    55
    56
    57
    58
     
    int main(int argc, char *argv[])
    {
    	long  heures = 0, minutes = 0, masseCorporelle = 0, nombreConsommations = 0, masseAlcool[0], i = 0;
    	double alcoolemie = 0;
    	char choix = 0, sexe = 0, chaine[3] = "", *finChaine = NULL;
    	/*time_t timestamp = 0;*/
     
    	system("clear");
     
    	printf("-------------------------[MENU]");
     
    	printf("\n[1] Calcul de base");
    	printf("\n[2] Calcul en temps réel");
    	printf("\n[3] Quitter le programme");
    	printf("\nVotre choix : ");
    	choix = getchar();
    	while (getchar() != '\n');
     
    		system("clear");
     
    		printf("\n-------------------------[PROFIL]");
    		printf("\nVotre sexe [h/f] : ");
    		sexe = getchar();
    		while (getchar() != '\n');
    		printf("Votre masse corporelle en Kg : ");
    		fgets(chaine, sizeof chaine, stdin);
    		clean(chaine, stdin);
    		masseCorporelle = strtol(chaine, &finChaine, 10);
     
    	if(choix == '1')
    	{	
    		printf("\n-------------------------[CONSOMMATION]");	
    		printf("\nLa masse d'alcool que vous avez ingéré en Gr : ");
    		fgets(chaine, sizeof chaine, stdin);
    		clean(chaine, stdin);
    		masseAlcool[nombreConsommations] = strtol(chaine, &finChaine, 10);
     
    		printf("\n-------------------------[RESULTAT]");
    		alcoolemie = calculAlcoolemie(sexe, masseCorporelle, masseAlcool);
    		printf("\nVotre alcoolemie est de %.2f grammes par litre de sang.", alcoolemie);
     
    		if(alcoolemie > 0.5)
    		{
    			eliminationAlcool(&heures, &minutes, alcoolemie - 0.50); // 0.50 est la taux d'alcool au volant limité en France
    			printf("\nAttention! Attendez %ld heures et %ld minutes avant de prendre le volant.", heures, minutes);
    		}
    		if(alcoolemie < 0.5)
    		{
    			printf("\nVous pouvez prendre le volant.");
    		}
     
    		eliminationAlcool(&heures, &minutes, alcoolemie);	
    		printf("\nVotre alcoolemie sera nul dans %ld heures et %ld minutes.\n\n", heures, minutes);
     
    	}
    return 0;
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Par défaut
    Ok , j'ai désactiver tes fonctions et c'est ok .
    donc place moi ici tes fonctions pour voir ...si tu veu bien

    le code suivant est correct ...fonctions perso désactivé...
    voir aussi »» system("cls"); et non 'clear'

    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
    54
    55
    56
    57
    58
    59
    60
    61
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
    	long  heures = 0, minutes = 0, masseCorporelle = 0, nombreConsommations = 0, masseAlcool[0], i = 0;
    	double alcoolemie = 0;
    	char choix = 0, sexe = 0, chaine[3] = "", *finChaine = NULL;
    	/*time_t timestamp = 0;*/
     
    	system("cls");
     
    	printf("-------------------------[MENU]");
     
    	printf("\n[1] Calcul de base");
    	printf("\n[2] Calcul en temps réel");
    	printf("\n[3] Quitter le programme");
    	printf("\nVotre choix : ");
    	choix = getchar();
    	while (getchar() != '\n');
     
    		system("cls");
     
    		printf("\n-------------------------[PROFIL]");
    		printf("\nVotre sexe [h/f] : ");
    		sexe = getchar();
    		while (getchar() != '\n');
    		printf("Votre masse corporelle en Kg : ");
    		fgets(chaine, sizeof chaine, stdin);
    		//clean(chaine, stdin);
    		masseCorporelle = strtol(chaine, &finChaine, 10);
     
    	if(choix == '1')
    	{
    		printf("\n-------------------------[CONSOMMATION]");
    		printf("\nLa masse d'alcool que vous avez ingéré en Gr : ");
    		fgets(chaine, sizeof chaine, stdin);
    		//clean(chaine, stdin);
    		masseAlcool[nombreConsommations] = strtol(chaine, &finChaine, 10);
     
    		printf("\n-------------------------[RESULTAT]");
    		//alcoolemie = calculAlcoolemie(sexe, masseCorporelle, masseAlcool);
    		printf("\nVotre alcoolemie est de %.2f grammes par litre de sang.", alcoolemie);
     
    		if(alcoolemie > 0.5)
    		{
    			//eliminationAlcool(&heures, &minutes, alcoolemie - 0.50); // 0.50 est la taux d'alcool au volant limité en France
    			printf("\nAttention! Attendez %ld heures et %ld minutes avant de prendre le volant.", heures, minutes);
    		}
    		if(alcoolemie < 0.5)
    		{
    			printf("\nVous pouvez prendre le volant.");
    		}
     
    		//eliminationAlcool(&heures, &minutes, alcoolemie);
    		printf("\nVotre alcoolemie sera nul dans %ld heures et %ld minutes.\n\n", heures, minutes);
     
    	}
    system("PAUSE");
    return 0;
    }

  5. #5
    Invité
    Invité(e)
    Par défaut
    Et voici les fonctions:
    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
     
    // Calcul du taux d'alcool en gramme par litre de sang
    double calculAlcoolemie(char sexe, long masseCorporelle, long masseAlcool[])
    {
    	double coefDiffusion = 0;
     
     
    	if (sexe == 'h')
    	{
    		coefDiffusion = 0.7; // Coefficient de diffusion 0,7 pour l'homme 
    	}
    	if (sexe == 'f')
    	{
    		coefDiffusion = 0.6; // Coefficient de diffusion 0,6 pour la femme
    	}
     
    	return masseAlcool[0] / (coefDiffusion * masseCorporelle); // Formule de Widmark
    }
     
    // Calcul du temps d'élimination de l'alcool en Heures et Minutes
    void eliminationAlcool(long *ptrHeures,long *ptrMinutes, double alcoolemie)
    {      
     
    	*ptrMinutes = alcoolemie / 0.15 * 60; // 0.15 est le nombre de gramme par litre de sang éliminé en une heure
     
    	*ptrHeures = *ptrMinutes / 60;
    	*ptrMinutes = *ptrMinutes % 60;
    } 
     
    void clean(const char *buffer, FILE *fp)
    {
           char *p = strchr(buffer,'\n');
           if (p != NULL)
                  *p = 0;
           else
           {
                  int c;
                  while ((c = fgetc(fp)) != '\n' && c != EOF);
           }
    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai trouvé après 3 heures de recherche !
    Le problème venait du tableau mal définit. Lol
    Désolé pour le dérangement et merci d'avoir pris le temps de m'aider.

+ Répondre à la discussion
Cette discussion est résolue.

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