2016-02-20 1 views
-3

J'essaie d'envoyer un time_t à une fonction en utilisant une variable pointeur time_t. Je ne reçois aucun avertissement de compilateur lors de la compilation de mon code, mais une erreur valgrind lorsque je cours le code avec valgrind.Comment envoyer correctement le pointeur time_t à la fonction? J'ai rencontré une erreur valgrind en essayant de le faire

Mon code:

printTime(time_t *time){ 
    <prints time> 
} 
int main(void){ 
    struct tm beginTime = {0}; 
    time_t *begin = 0; 

    strptime("2012",""%Y,&beginTime); 
    beginTime.tm_isdst = -1; 
    *begin = mktime(&beginTime); **<-- Valgrind error points here** 

    printTime(begin); 


return 0; 
} 

Ceci est l'erreur valgrind Je reçois:

Invalid write of size 8. (Points at the location pointed at above) 
+0

vous pouvez commencer malloc – khuderm

+3

@khuderm: Ou tout simplement faire 'time_t begin' et passer' & begin'. – EOF

+1

Pourquoi utilisez-vous 'time_t *'? Essayez 'time_t begin = mktime (& begintime);' et passez l'adresse de début? –

Répondre

0

il y a plusieurs erreurs de syntaxe dans le code affiché.

lors de la compilation, permettre à tous les avertissements, puis corriger ces avertissements

le code suivant:

  1. compile proprement
  2. fonctionne sans écraser

maintenant le code:

#include <stdio.h> 
#include <time.h> 



void printTime(time_t *time) 
{ 
    (void)time; 
    //<prints time> 
} 


int main(void) 
{ 
    struct tm beginTime = {0}; 
    time_t *begin = 0; 

    strptime("2012","%Y",&beginTime); 
    beginTime.tm_isdst = -1; 
    begin = mktime(&beginTime); // << notice no '*' before 'begin' 
            // because 'begin' is already declared as a pointer 

    printTime(begin); 


return 0; 
} 

Si valgrind continue d'indiquer un problème, vous pouvez essayer de passer begin à free().

I.E. juste avant l'insertion de l'instruction return 0;:

free(begin);