C++ struct tm & time_t

У меня есть множество времени здесь:

struct cl{
    unsigned char *buffer;
    time_t t = time(0);  
    struct tm * ct = localtime(&t);
};

а потом:

cl sadi[10];

Но например я получил sadi[5] в 21:58и когда я получил sadi[6] в 21:59, Затем я проверяю снова все мои sadi[].ct->tm_min являются 59, В чем проблема с этим? Разве это не может удерживать момент, когда вы его захватываете, всегда ли он обновляется? Если так, как я могу захватить момент времени, и он не обновляется как этот.

1 ответ

Решение

Эта строка:

struct tm* ct = localtime(&t);

Проблема в том, что указатель localtime(&t) return - это статический внутренний буфер. Таким образом, он возвращает одно и то же значение указателя (адрес) при каждом вызове. Это означает, что все ваши элементы массива имеют указатели на одинаковые struct tm объект.

Одним из решений является создание копии данных каждый раз, когда вы звоните localtime:

struct cl {
    unsigned char* buffer;
    time_t t = time(0);  
    struct tm ct = *localtime(&t);
};

Так что теперь я заявляю struct tm ct; (не указатель) и инициализируйте его разыменованным значением возвращаемого указателя *localtime(&t),

Другие вопросы по тегам