2012-08-31 6 views
14
void log(){ 
    time_t current = time(0); 
    tm *ptm = localtime(&current); 
     stuf... 
} 

Voglio solo essere sicuro - ho bisogno di rilasciare memoria allocata tm puntatore alla fine del metodo?La memoria per ora locale deve essere deallocata?

+0

possibile duplicato di [Come viene strutturata la struttura dei risultati dell'ora locale in C?] (Http://stackoverflow.com/questions/8694365/how-is-the-result-struct-of-localtime-allocated-in- c) – user

+0

Vedere anche [Come risolvere perdite di dyld e localtime durante la creazione di profili di un progetto?] (http://stackoverflow.com/q/10105181) – jww

risposta

20

No non dovresti rilasciarlo, la struttura è allocata staticamente.

Controllare il documentation:

valore di ritorno
puntatore ad una std::tm oggetto interno in caso di successo, o NULL altrimenti. La struttura può essere condivisa tra std::gmtime, std::localtime e std::ctime e potrebbe essere sovrascritta a ogni chiamata.

+0

cosa si intende per allocazione statica? dosnt è allocato sullo heap dall'implementazione localtime? –

+0

@ user1495181: aggiunto riferimento per te. –

+1

s/should not/must not/ –

5

No, non dovresti. Questa struttura è allocata staticamente e condivisa dalle funzioni gmtime e localtime. Ogni volta che una di queste funzioni viene chiamata il contenuto di questa struttura viene sovrascritto.

Quindi, fai attenzione ai risultati, ad es. copiarli immediatamente e non memorizzare il puntatore.

Problemi correlati