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

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

 struct time_t *start; 

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

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

还要注意time_t * start是在类的构造函数中初始化的。

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

 int main(int argc, char **argv) { ... time_t *start; time(start); ... } 

我用错了吗? 我记得在很久以前的一些应用程序,这是我如何使用它,它运作良好。

你必须传递一个有效的指针给time()函数。 那么你为什么不这样做:

 time_t start; time(&start); time_t stop; time(&stop); 

也就是说,不要声明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; 

但我不会建议这个。 我建议你去使用非指针变量。

将其更改为:

 int main(int argc, char **argv) { ... time_t start; time(&start); ... } 

问题是这个函数需要一个指向有效time_t的指针,但是你传递了一个未初始化的time_t指针,导致未定义的行为。