我正在导入<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);
...
}
我是以错误的方式使用它吗?我记得在很久以前的某些应用程序中,我就是这样使用它并且工作正常。
答案 0 :(得分:7)
您必须将有效指针传递给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;
但我不建议这样做。我建议你使用非指针变量。
答案 1 :(得分:5)
将其更改为:
int main(int argc, char **argv)
{
...
time_t start;
time(&start);
...
}
问题是该函数期望指向有效time_t
的指针,但是您向它传递了一个未初始化的time_t
指针,这会导致未定义的行为。