對於以下代碼: (1)「main」調用函數「f1」。 (2)函數「f1」做了一些數字處理;用malloc創建一個「char」數組,然後將該數組的指針返回給main(不需要取消分配數組)。在函數返回後,函數中分配的內存是否仍然保留分配?
我有3點相關的情況下的問題: (1)我假定,儘管函數「F1」已經終止,所分配的字符數組仍然停留分配直至主程序完全終止。也就是說,分配的內存仍然屬於主內存,其他進程不能從外部訪問(我的意思是干擾)內存。我對嗎? (2)在程序結束之前是否必須釋放數組(在「f1」中分配)(或者一旦主程序終止,它是否被釋放)? (3)如果第二個問題的答案是「是」,那麼如何釋放在另一個函數中分配的數組?
注意:我想保持純c的界限,而不是溢出到C++。
char *f1 (...) {
...
...
char *fTmp = malloc (length1 * sizeof (char));
char *fData = malloc (length2 * sizeof (char));
...
...
free (fTmp);
return (fData);
}
int main() {
char *fData = f1 (...);
...
return (0);
}
我正在做同樣的事情;也就是說,我使用通過**的指針在另一個進程中創建的一個進程中釋放了該數組。我不確定我所做的是正確的。所以,你的方法似乎是最接近的答案:「誰分配內存也釋放它是很好的,如果不可能,那麼調用者將負責這樣的內存。」 – ssd 2014-08-29 12:31:42
@ merkez3110但是你不能在進程之間共享指針(除非你在沒有受保護的虛擬內存的環境中運行)。 – 2014-08-29 12:33:10
請原諒我使用錯誤的術語:「過程」。在我上面的評論中,我的意思是在同一個程序中不同的「功能」,而不是不同的過程。 謝謝大家。 – ssd 2014-08-29 12:53:00