-3

time_t ポインター変数を使用して関数に time_t を送信しようとしています。コードをコンパイルするときにコンパイラの警告は表示されませんが、valgrind でコードを実行すると valgrind エラーが発生します。

私のコード:

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;
}

これは私が得ているvalgrindエラーです:

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

1 に答える 1

0

投稿されたコードにはいくつかの構文エラーがあります。

コンパイル時に、すべての警告を有効にしてから、それらの警告を修正します

次のコード:

  1. きれいにコンパイル
  2. クラッシュすることなく実行されます

今コード:

#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;
}

valgrind が引き続き問題を示す場合は、 に渡しbeginてみてくださいfree()

return 0;ステートメント挿入の直前の IE :

free( begin );
于 2016-02-20T06:39:00.430 に答える