2008-10-01 104 views
6

我調用getpwuid(uid)之後,我有一個指針的引用。當我不再使用它時,我應該釋放它嗎?閱讀手冊頁時,它說它引用了一些靜態區域,可能會被隨後對相同函數的調用覆蓋,所以我確信我是否應該觸摸該內存區域。我應該在Linux中釋放由getpwuid()返回的指針嗎?

謝謝。

回答

9

不,您不需要解除結果。您只能通過malloc(3),calloc(3)或realloc(3)在堆上分配的指針調用free(3)。

靜態數據是程序數據或bss段的一部分,並且會一直存在,直到進程退出(或被exec(2)覆蓋)。

1

實際上它返回一個指向已經存在的結構的指針,所以你應該而不是釋放它。

5

爲線程安全(可重入)函數使用*_r函數(getpwuid_r()),該函數允許您提供緩衝區空間來放置返回的信息。確保檢查errno是成功還是失敗。如果不使用可重入函數,則可以安全地假定函數返回的數據不需要被釋放,但是也會被連續調用相同函數的數據覆蓋。

+0

似乎存在內存問題,甚至* _r函數 – codingfreak 2013-02-12 16:45:42

相關問題