C++ linux时间冻结应用程序

Æle*_*lex 2 c++ linux time

我正在导入<sys/time.h>和使用

struct time_t *start;
Run Code Online (Sandbox Code Playgroud)

一个类有一个成员time_t*start; 和一个成员函数getETA():

template <class S, class P> 
double Task<S,P>::getETA()
{ 
  time_t *stop;
  time(stop);
  return difftime(*stop , *start);
}
Run Code Online (Sandbox Code Playgroud)

另请注意,time_t*start在类构造函数中初始化.

每当我调用getETA()时,应用程序就会冻结.更有趣的是,我在主循环中的main.cpp中使用了相同的结构和代码,显然它也冻结了应用程序:

int main(int argc, char **argv) 
{ 
  ...
  time_t *start;
  time(start);
  ...
}
Run Code Online (Sandbox Code Playgroud)

我用错了吗?我记得在很久以前的一些应用中,这就是我如何使用它并且它运行良好.

Naw*_*waz 7

您必须将有效指针传递给time()函数.那么你为什么不这样做:

time_t start;
time(&start);

time_t stop;
time(&stop);
Run Code Online (Sandbox Code Playgroud)

也就是说,不申报startstop指针.将它们声明为非指针,自动变量.

如果您将它们声明为指针,那么您必须这样做:

time_t *start = new time_t;
time(start);

time_t *stop  = new time_t;
time(stop);

//...

//Must deallocate the memory when you don't need them anymore
delete start;
delete stop; 
Run Code Online (Sandbox Code Playgroud)

但我不建议这样做.我建议你使用非指针变量.


Joh*_*ter 5

将其更改为:

int main(int argc, char **argv) 
{ 
  ...
  time_t start;
  time(&start);
  ...
}
Run Code Online (Sandbox Code Playgroud)

问题是该函数期望指向有效的指针time_t,但是您向它传递了一个time_t未初始化的指针,这会导致未定义的行为.