一、malloc()和free()的基本概念以及基本用法:
1、函式原型及說明:
void *malloc(long numbytes):該函式分配了numbytes個位元組,並返回了指向這塊記憶體的指標。如果分配失敗,則返回乙個空指標(null)。
關於分配失敗的原因,應該有多種,比如說空間不足就是一種。
void free(void *firstbyte): 該函式是將之前用malloc分配的空間還給程式或者是作業系統,也就是釋放了這塊記憶體,讓它重新得到自由。
2、函式的用法:
其實這兩個函式用起來倒不是很難,也就是malloc()之後覺得用夠了就甩了它把它給free()了,舉個簡單例子:
// code...
char *ptr = null;
ptr = (char *)malloc(100 * sizeof(char));
if (null == ptr)
gets(ptr);
// code...
free(ptr);
ptr = null;
// code...
就是這樣!當然,具體情況要具體分析以及具體解決。比如說,你定義了乙個指標,在乙個函式裡申請了一塊記憶體然後通過函式返回傳遞給這個指標,那麼也許釋放這塊記憶體這項工作就應該留給其他函式了。
3、關於函式使用需要注意的一些地方:
a、申請了記憶體空間後,必須檢查是否分配成功。
b、當不需要再使用申請的記憶體時,記得釋放;釋放後應該把指向這塊記憶體的指標指向null,防止程式後面不小心使用了它。
c、這兩個函式應該是配對。如果申請後不釋放就是記憶體洩露;如果無故釋放那就是什麼也沒有做。釋放只能一次,如果釋放兩次及兩次以上會
出現錯誤(釋放空指標例外,釋放空指標其實也等於啥也沒做,所以釋放空指標釋放多少次都沒有問題)。
d、雖然malloc()函式的型別是(void *),任何型別的指標都可以轉換成(void *),但是最好還是在前面進行強制型別轉換,因為這樣可以躲過一
些編譯器的檢查。
C語言中malloc函式實現
該實現使用大容量的靜態陣列作為堆,但也可使用作業系統呼叫分配堆。定義了乙個資料型別header儲存每個儲存器塊的簿記資訊,定義了具有header型別元素的堆陣列,這樣就可以很容易地將簿記資訊儲存在儲存器塊中。型別header包含了3塊資訊 指向列表的下乙個塊的指標,當前分配空間的長度,後面的自由空間...
c語言中的malloc
今天想去練習一下二叉樹的使用的,使用前就必須要建立乙個二叉樹啊。我用的是前序式的建立方法,都是通過呼叫子函式createtree來建立乙個樹 先建立根 左孩子 右孩子 是通過遞迴的方法的。但是當我測試的時候,每次訪問樹根的都會出錯,原來建立的二叉樹根本就沒有儲存在主函式的head中,我用單步除錯發現...
C語言中的malloc與free函式
malloc函式的作用是在堆中開闢一塊指定大小的空間。如果開闢成功,返回空間首個位元組位址,失敗則返回null。free函式能夠釋放在堆中開闢的記憶體空間,傳入乙個任意型別的指標變數,指向指向被釋放區域的首位址。被釋放區域應是有malloc開闢的空間。需要注意的是 free釋放記憶體空間只是失去了對...