1. 程式人生 > >為什麼localtime()函式返回的指標不需要釋放?

為什麼localtime()函式返回的指標不需要釋放?

下面封裝的是一個得到當前時間的函式
void Get_current_time(unsigned char *time_str )
{
 time_t cur_time =time(NULL);
 struct tm *local = localtime(&cur_time);
 sprintf((char*)time_str,"%04d%02d%02d%02d%02d%02d",
  local->tm_year+1900,
  local->tm_mon+1,
  local->tm_mday,
  local->tm_hour,
  local->tm_min,
  local->tm_sec);
 //free(local);//為什麼不需要釋放???
}

解釋:

localtime返回的指標是靜態申請的,所以他一直存在與全域性儲存區,直到程式結束後才釋放,所以他可以在函式呼叫之後繼續使用。
//大概是這樣實現的
struct tm *localtime( const time_t *time )
{
 static struct tm _tm;
 ...
 return &_tm;
}
所以呢,不需要在函式中釋放,也不需要在函式外釋放

相關推薦

為什麼localtime()函式返回指標需要釋放?

下面封裝的是一個得到當前時間的函式 void Get_current_time(unsigned char *time_str ) {  time_t cur_time =time(NULL);  s

C語言 結構體指標需要申請記憶體但函式定義指標需要申請

在函式定義指標或者變數已經為指標本身和變數本身分配了記憶體所以用指標指向一個已經定義的變數時不需再分配記憶體 但是資料結構中用指標指向結構體時只為指標本身分配了記憶體如果要對結結構體填入內容就要分配一個結構體大小的記憶體才可以 但只自己分配的記憶體一定要養成

python 縮排-函式首行需要縮排

import time def time(func):     print(time.ctime())     return func() @time  # 從這裡可以看出@time 等價於 time(xxx()),但是這種寫法你得考慮pyt

C++ 函式返回指標注意事項

C++ 不支援在函式外返回區域性變數的地址,除非定義區域性變數為static 變數。 #include <iostream> #include <ctime> #include <cstdlib> using namespace std; /

函式返回指標,引用與指標區別

1,函式不可以返回棧記憶體的指標,但是可以返回堆記憶體的指標,可以free掉兩次指向空的指標,但是不能連續free兩次指向記憶體的指標,會產生已放棄   int main() { int *a; a = (int *)malloc(10); a[0] = 1

簡單探討spring整合mybatis時sqlSession需要釋放關閉的問題

近期,在使用spring和mybatis框架編寫程式碼時,sqlSession不需要手動關閉這一點引起了我的興趣。我們都知道,單獨使用mybatis時,sqlSeesion使用完畢後是需要進行手動關閉的,但為什麼在和spring整合後就不需要了呢?在查閱了資料後得知,這是使用了spring中的AOP面向切面程

指標的高階用法——從函式返回指標

在上一章中,我們已經瞭解了 C 語言中如何從函式返回陣列,類似地,C 允許您從函式返回指標。為了做到這點,您必須宣告一個返回指標的函式,如下所示: int * myFunction() { . . . } 另外,C 語言不支援在呼叫函式時返回區域性變數的地址,除非定義區域性變數為 static 變數。

C++ 從函式返回指標函式返回區域性靜態變數的地址)

C++ 不支援在函式外返回區域性變數的地址,除非定義區域性變數為 static 變數。 錯誤程式碼: int main(){ int *p; p=funcGetPointer()

函式指標函式返回指標、const指標、指向const指標,指向const的const指標

①函式指標 函式指標是指向函式的指標變數。 因而“函式指標”本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。如前所述,C在編譯時,每一個函式都有一個入口地址,該入口地址就是函式指標所指向的地址。有了指向函式的

python3下使用map()函式返回導致能直接使用的解決辦法

例如: 在Python3中使用下面的語句,會報錯TypeError: float() argument must be a string or a number, not 'map' np.array(map(float, line.strip().split(' '))

vector 釋放記憶體需需要delete

是否需要delete是看你有沒有用new. 具體的幾個例子說明: vector<int> vIntList; //這個是不用delete的. vector<char*> vPointList; char 

C++中函式返回陣列指標的幾種方法總結

因為陣列不能被拷貝,所以函式不能返回陣列。不過,函式可以返回陣列的指標或引用。返回陣列指標的方法有以下幾種:     1、方法一:使用類型別名。如下         typedef int arrt[10];//arrT是一個類型別名,它表示的型別是含有10個整數的陣列   

【C++】子函式返回結構體的程式碼 及 字串常量傳入子函式指標實現

說明: 1. 下面的子函式 getStu 裡,傳入了三個引數: 字串指標 char * name 整型變數 int k_year; char * k_sex; 2. 當把字串作為引數傳遞給子函式時,主程式中可以使用字串常量,但子函式的形參只能使用字元型指標 char

指標12 返回指標函式

函式呼叫結束後,可以返回一個值給主函式,這個值可以是整型、實型、字元型等基本型別資料,也可以是指標,即地址。 例如 題目:編寫str_chr函式,其功能是在一個字串中查詢一個指定字元,找到後返回該字元的地址,若未找到則返回空指標。在main函式中呼叫str_chr 函式,查

sort函式的用法(C++排序庫函式的呼叫)對陣列進行排序,在c++中有庫函式幫我們實現,這們就需要我們自己來程式設計進行排序了。

對陣列進行排序,在c++中有庫函式幫我們實現,這們就不需要我們自己來程式設計進行排序了。 (一)為什麼要用c++標準庫裡的排序函式 Sort()函式是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用

ARM基礎:為何C語言(的函式呼叫)需要堆疊,而組合語言卻需要堆疊

https://www.cnblogs.com/liuchengchuxiao/p/4113233.html 為何C語言(的函式呼叫)需要堆疊,而組合語言卻不需要堆疊 之前看了很多關於uboot的分析,其中就有說要為C語言的執行,準備好堆疊。 而自己在Uboot的start.S彙編程

JAVA 後端返回資料過濾需要的欄位 萌新記錄

之前做專案的時候,基本都是查到一個物件或者一個集合就拋給前端,也沒注意過敏感資料洩露的問題,最近經人提醒,開始考慮怎麼解決。 這裡貼一篇很不錯的博文 java介面資料json過濾欄位方法整理 但是專案用的是fastjson,按照博文方法過濾的話有點麻煩,並且我的返回值是經過包裝的JSON

C語言基礎——指標函式返回

既然指標可以作為函式的引數傳給函式,那麼也一定可以作為函式的返回值,返回給呼叫函式。 比如,自己寫一個返回兩者之中較長字串的函式的示例程式碼: #include<stdio.h> #include<string.h> char *compare(

函式指標釋放問題

     C語言中遇到一個這樣的問題:子函式中malloc了一個指標儲存資料,作為該子函式的返回值,return到主函式。      那麼這個指標應該在哪裡釋放呢?     

編寫裝飾器, 為多個函式加上認證功能(使用者的賬戶密碼來源於檔案, 使用者有三次登入的機會), # 要求, 如果使用者登入成功了, 後續就需要再次登入了.

# flag = False # 一開始沒有登入## def login(): # 函式:對功能或者動作的封裝# global flag# username = input("請輸入你的使用者名稱:")# password = input("請輸入你的密碼:")## with