Я пишу служебную функцию, чтобы получить текущий час от системных часов. Я включил и другие необходимые библиотеки; мой код полностью компилируется и запускается.
Когда я запускаю valgrind, я получаю ошибки, в которых говорится, что "неинициализированное значение было создано выделением стека", а соответствующие "условные переходы зависят от неинициализированных значений". Я сузил это до следующей функции:
size_t get_hour(){
chrono::duration<int,ratio<60*60*24>> one_day (1);
chrono::system_clock::time_point today = chrono::system_clock::now();
time_t tt = chrono::system_clock::to_time_t (today);
const char hr[2] = {ctime(&tt)[11], ctime(&tt)[12]};
return (size_t)stoi(hr);
}
, который работает правильно (то есть возвращает правильное время в виде двузначного числа). Тем не менее, эти ошибки памяти заставляют меня думать, что я делаю что-то не так, назначая ctime(&tt)[11]
и ctime(&tt)[12]
моим const char hr[2]
Мое первое предположение состояло в том, что, если текущий час представляет собой одну цифру, 11-й или 12-й индексы не определены из вызова ctime
- но я поиграл с печатью этих значений в разное время, и все они, кажется, печатать правильно. Более того, я получаю эти ошибки независимо от времени суток.
Может ли кто-нибудь указать мне правильное направление? Мне не удалось найти много соответствующих примеров правильного использования ctime и system_clock.
Спасибо!