讓我們假設我有以下的C代碼:是否需要釋放函數返回的變量的內存(C)?
void myfunction() {
time_t t = 0;
struct tm *ct;
time(&t);
ct = localtime(&t);
}
正如你所看到的,localtime
函數返回一個新的指針struct tm
變量。據我所知,從一個函數返回的變量是在它需要滿足以下的至少一個呼叫者上下文中有效:
- 返回的變量必須在調用者的上下文中聲明或更高的情況下與來電者有關。
- 返回的變量必須在堆上有分配的內存。
在我的情況下,第一點不適用,所以認爲第二個是完成是正常的。
我對不對?
如果是,是否意味着我需要在使用ct
後調用free變量?
如果不是,你可以詳細一點嗎?
謝謝!
編輯:
從反應,予理解的是,應該有一個變量爲可用在上下文其中返回的要求的另一點。這應該是靜態變量。還有另一種可能嗎?
這取決於。你閱讀文檔,然後,你會知道的。多數情況下,沒有。 – 2013-03-20 07:16:51
其他可能性比較模糊,但嚴格來說,內存映射文件並非從堆中分配,而是仍然可以訪問。而且,在嵌入式世界中,可能會有與物理硬件相對應的內存地址。 – rra 2013-03-20 20:56:58