Почему не нужно использовать указатель malloc struct tm перед вызовом функции localtime()?

Мой код

#include <iostream>
#include <ctime>

using namespace std;

void main()
{
    time_t nowTime;
    struct tm *nowStruct;

    time(&nowTime);

    nowStruct = localtime(&nowTime);
    cout << nowStruct->tm_hour << ":" << nowStruct->tm_min << endl;
}

Я подозреваю, что где находится адрес памяти, используемый для хранения struct tm.


person SuperJOE    schedule 11.07.2013    source источник


Ответы (1)


localtime использует внутренний глобальный буфер (или, возможно, локальный поток), адрес которого он возвращает. Эта практика сохранения глобального состояния похожа на то, как работают strtok и rand. Обратите внимание, что это делает функцию по своей сути нерентабельной и, возможно, небезопасной для потоков.

person Kerrek SB    schedule 11.07.2013
comment
Чтобы добавить к этому, процитирую справочную страницу моей системы: Возвращаемое значение указывает на статически размещенную структуру, которая может быть перезаписана последующими вызовами любой из функций даты и времени. - person moooeeeep; 11.07.2013