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

C++ linux time freezes application

本文关键字:应用程序 冻结 时间 linux c++      更新时间:2023-10-16

我正在导入<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指针,这会导致未定义的行为。