傳遞動態記憶體

2022-01-17 07:28:45 字數 892 閱讀 5422

#include#include

#include

int malloc(char *p)

intmain()

分析問題:

在int malloc(char *p)中的*p實際上市主函式p的乙個副本,編譯器總是要為函式的每個引數製作臨時副本。在本例中p申請了心的記憶體,知識把p所指的記憶體的位址改變了,但是p1絲毫未變。因為函式malloc沒有返回值,因此p1並不指向p所申請的那段記憶體。事實上,每執行一次malloc就會申請一塊記憶體,但申請的記憶體卻不能有效釋放,結果是記憶體一直被獨佔,最終造成記憶體洩露。

如果一定要用指標引數去申請記憶體,那麼應該採用指向指標的指標,傳p1的位址給函式malloc.

**如下:

#include#include

#include

int malloc(char **p)

intmain()

還可以用函式返回值來傳遞動態記憶體,這種方法更加簡單:(用到指標函式)

#include#include

#include

char *malloc(char *p)

intmain()

再看下面這個有意思的問題:

#include#include

#include

char *malloc()

intmain()

這段**輸出的是什麼呢?

答案是:亂碼,因為malloc此時返回的是指向「棧記憶體」的指標,該指標的位址不是null,但是其原來的內容已經被清除,新內容不可知。(這個為什麼呢?)

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道。這些往往會使人受盡折磨,所以如果你想深入c c 程式設計,你必須靜下心來好好苦一番。現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞。並且在軟體開發中很多專業人...

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...