2014-08-27 102 views
5

我有這樣的代碼:這段代碼是否有任何內存泄漏?

int tim=10000; // some random number 
tm *now=localtime(&tim); 
printf("Date is %d/%02d/%02d\n", now->tm_year+1900, now->tm_mon+1, now->tm_mday); 
printf("Time is %02d:%02d\n", now->tm_hour, now->tm_min); 

,我想知道如果它有內存泄漏是本地時間返回一個指向一個結構,這意味着它分配存儲器的原因。但沒人釋放它。

這段代碼有沒有內存泄漏?

+1

你能告訴我們'localtime'內發生了什麼嗎? – CoryKramer 2014-08-27 13:59:48

+0

您應該使用'time_t'而不是整數 – 2014-08-27 14:01:58

+1

此功能很危險。它使用一個靜態變量,這意味着它不是線程安全的。 – HuStmpHrrr 2014-08-27 14:02:02

回答

9

您不必(也不得)明確釋放任何東西,因爲localtime返回指向靜態對象的指針。

C標準表示:

(C11,7.27.3時間轉換函數P1)「除strftime函數,每個這些函數返回一個指向兩種類型的靜態對象中的一個:一個broken-停機時間結構或char數組「。一個破舊的時間:

而且從POSIX.1-2008文檔,

的asctime()的ctime(),gmtime的()和localtime()函數將在兩個靜態對象的一個​​返回值結構和一個char類型的數組。任何函數的執行可能會覆蓋任何其他函數在這些對象中返回的信息。

+0

您的措辭'沒有必要'讀取相當危險,我認爲解放很可能會導致問題。 – Wolf 2014-08-27 14:38:11

+0

@狼我修改了措辭 – ouah 2014-08-27 14:51:40

+0

現在好多了:-) – Wolf 2014-08-28 07:26:16