C ++ linux время замораживает приложение - PullRequest
2 голосов
/ 30 июля 2011

Я импортирую <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);
  ...
}

Я использую это неправильно? Я помню, в каком-то приложении давным-давно, так я его использовал, и он работал нормально.

Ответы [ 2 ]

7 голосов
/ 30 июля 2011

Вы должны передать действительный указатель на функцию 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; 

Но я бы не стал этого предлагать.Я бы предложил вам использовать переменные без указателей.

5 голосов
/ 30 июля 2011

Измените его на:

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

Проблема в том, что функция ожидала указатель на действительный time_t, но вы передали ему указатель time_t, который не инициализирован, что приводит к неопределенномуповедение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...