我正在导入<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);
也就是说,不要声明start
和stop
作为指针 。 将它们声明为非指针,自动变量。
如果你将它们声明为指针,那么你必须这样做:
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
指针,导致未定义的行为。