記憶體管理幾個程式例項

2021-08-02 20:17:26 字數 1184 閱讀 9922

void getmemory(char *p, int num)

void test(void)

解析:getmemory(str, 100)傳的是str的值(null),所以分配記憶體的時候是對str值操作,不是對它的位址的操作。所以strcpy呼叫時,str值仍為null,並未malloc到記憶體。malloc後一定要free,否則會造成記憶體洩漏(退出後程式仍占用記憶體,可能造成系統崩潰)。

程式改正:

void getmemory2(char **p, int num)

void test2(void)

將str的位址傳給函式,對位址操作才能分配到記憶體空間。

char *getstring(void)

void test4(void)

這裡p[ ]是陣列存放在棧區,所以」hello world」也存放在了棧區。而且是區域性變數,區域性變數離開該區域以後就被釋放了,所以在test4函式無法得到」hello world」。所以把陣列改為指標就可以了。

修改char *getstring(void)

char *p = "hello world";
指標p雖然也存放在棧,但是它指向的」hello world」是乙個常量。

函式 test5 執行雖然不會出錯,但是函式 getstring2 的設計概念卻是錯誤的。因為getstring2 內的「hello world」是常量字串,位於靜態儲存區,它在程式生命期內恆定不變。無論什麼時候呼叫 getstring2,它返回的始終是同乙個「唯讀」的記憶體塊。

用函式返回值來傳遞動態記憶體這種方法雖然好用, 但是常常有人把 return 語句用錯了。這裡強調不要用 return 語句返回指向「棧記憶體」的指標,因為該內存在函式結束時自動消亡。

objective C程式 記憶體管理

記憶體管理 記憶體管理概念 由於移動裝置的記憶體機器有限所以每個被占用的記憶體也是有限的。不用的記憶體是需要 的,否則程式會崩潰 oc 管理記憶體的範圍 管理任何繼承nsobject的物件,對其他的基本資料型別無效 基本資料型別資料占用的儲存空間是固定的 一般儲存在棧區。物件型別是程式執行過程中動態...

Symbian程式記憶體管理

在symbian os中,有3中方法來處理記憶體洩露 捕獲裝置trap和trapd 清理棧 cleanupstack 和二階構造。一.trap和trapd trap和trapd是兩個預定義的巨集,作用是捕獲函式所產生的異常。程式 1 void createobjectl 25 tint err 6t...

學習記憶體管理例項的感想

這一周主要看了陳老師的記憶體管理例項,感覺理解的很有限,例項 的 如下 http home.lupaworld.com home space uid 26540 do blog id 230202.html 師姐把這個例項拆分成了四個部分,第一部分比較簡單,根據 vm area struct 結構體...