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 :

Petit prob de date et Segmentation Fault


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut Petit prob de date et Segmentation Fault
    Bonjour,

    Voilà je fais des petites expériences sur les dates pour les inclure par la suite dans un projet mais je rencontre un petit problème de segmention fault.

    voici le code ( je cherhe à creer deux dates pour ensuite les soustraires avec difftime mais je teste avant pour voir si elles soont bien initialisées)

    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
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(){
     
     
    	time_t time1;
    	time_t time2;
    	struct tm * t;
    	struct tm * t2;
     
    	time1 = time(NULL);
     
    	t2->tm_mday=5;
    	t2->tm_mon=3;
    	t2->tm_year=110;
    	t2->tm_hour=0;   
        	t2->tm_min=0;   
        	t2->tm_sec=0;
    	time2=mktime(t2);
     
    	t = localtime(&time1);
    	t->tm_hour=0;   
        	t->tm_min=0;   
        	t->tm_sec=0;
    	time1=mktime(t);
     
     
     
    	printf("time 1 : %d %d %d %d %d %d\n",t->tm_mday,1+t->tm_mon,1900+t->tm_year,t->tm_hour,t->tm_min,t->tm_sec);
    	printf("time 2 : %d %d %d %d %d %d\n",t2->tm_mday,1+t2->tm_mon,1900+t2->tm_year,t2->tm_hour,t2->tm_min,t2->tm_sec);
    	return 0;
    }
    Il m'affiche bien les deux dates comme je le veux mais il m'affiche aussi "erreur de segmentation" et je ne sais pas pourquoi !

    Merci de m'aider

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Bonjour,

    Code C : 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
    …
     
    	struct tm * t;
    	struct tm * t2;
     
            …
     
    	t2->tm_mday=5;
    	t2->tm_mon=3;
    	t2->tm_year=110;
    	t2->tm_hour=0;   
        	t2->tm_min=0;   
        	t2->tm_sec=0;
    	time2=mktime(t2);
     
    	t = localtime(&time1);
    	t->tm_hour=0;   
        	t->tm_min=0;   
        	t->tm_sec=0;
    	time1=mktime(t);

    Contrairement à « t », « t2 » n'est pas initialisé au préalable par toi ou par le retour d'une fonction comme localtime(). Il pointe donc dans le vide. Chez moi, la segfault se produit au niveau de « t2=mktime(t2) » mais cela pourrait tout autant arriver au niveau des instructions qui précèdent (« t2->tm_mday=5; t2->tm_mon=3; ; … »).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    Merci beaucoup !

    j'ai initialisé avec un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t2 = localtime(&time2);
    et ça marche niquel !
    Erreur toute bête comme d'hab !

    Bonne journée

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    De rien, mais n'oublie pas !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    Raaah...
    Finalement je n'ai plus le segfault mais je n'ai pas le resultat voulu:
    en effet il me met :
    time 1 : 3 4 2010 0 0 0
    time 2 : 3 4 2010 0 0 0
    La différence est de 2 jours

    alors que j'aimerai:
    time 1 : 3 4 2010 0 0 0
    time 2 : 5 4 2010 0 0 0
    La différence est de 2 jours

    voici le 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
    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
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main(){
     
     
    	double diff;
    	time_t time1;
    	time_t time2;
    	struct tm * t;
    	struct tm * t2;
     
    	time1 = time(NULL);
    	time2 = time(NULL);
     
    	t2 = localtime(&time2);
    	t2->tm_mday=5;
    	t2->tm_mon=3;
    	t2->tm_year=110;
    	t2->tm_hour=0;   
        	t2->tm_min=0;   
        	t2->tm_sec=0;
    	time2=mktime(t2);
     
    	t=localtime(&time1);
    	t->tm_hour=0;   
        	t->tm_min=0;   
        	t->tm_sec=0;
    	time1=mktime(t);
     
     
    	diff=difftime(time2,time1);
     
    	printf("time 1 : %d %d %d %d %d %d\n",t->tm_mday,1+t->tm_mon,1900+t->tm_year,t->tm_hour,t->tm_min,t->tm_sec);
    	printf("time 2 : %d %d %d %d %d %d\n",t2->tm_mday,1+t2->tm_mon,1900+t2->tm_year,t2->tm_hour,t2->tm_min,t2->tm_sec);
    	printf("La différence est de %g jours\n",diff/86400);
     
    	return 0;
    }
    Merci de m'aider de nouveau....

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    C'est normal : localtime() te renvoie un pointeur vers une structure statique en mémoire. C'est toujours la même. Par conséquent, « t » et « t2 » pointent le même endroit et l'initialisation de t2 écrase les données de t.

  7. #7
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Ce qu'il faut faire donc c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct tm t, t2;
    t ou t2 = *localtime(&time1 ou &time2);
    time1 ou time2 = mktime(&t ou &t2);

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    Merci beaucoup !
    Les explications sont top, j'ai tout compris !

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

Discussions similaires

  1. Prob : Segmentation Fault
    Par Kalite dans le forum C++
    Réponses: 2
    Dernier message: 15/09/2011, 10h20
  2. [eclipse] quelques petits probs
    Par scorpiwolf dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 08/09/2004, 17h27
  3. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  4. Prob avec dates delphi
    Par ericmart dans le forum ASP
    Réponses: 6
    Dernier message: 20/10/2003, 17h51
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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