-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 继续指示问题,您可以尝试传递beginfree().

IE 就在return 0;语句插入之前:

free( begin );
于 2016-02-20T06:39:00.430 回答