malloc函式的作用是在堆中開闢一塊指定大小的空間。如果開闢成功,返回空間首個位元組位址,失敗則返回null。
free函式能夠釋放在堆中開闢的記憶體空間,傳入乙個任意型別的指標變數,指向指向被釋放區域的首位址。被釋放區域應是有malloc開闢的空間。
需要注意的是:
free釋放記憶體空間只是失去了對位址的操作許可權,並沒***清理記憶體空間。free是否能回清空釋放的記憶體空間,由作業系統決定。所以,需要手動清空以排除這樣的不可控因素。
在釋放記憶體空間之前需要新增判斷,釋放之後及時將p賦值為null,避免多次釋放同一記憶體空間(雖然重複釋放在gcc中並沒有給與警告,但是在執行時會發生斷錯誤,即程式中斷(vs中自動跳入斷點),使得後面的**不能正常執行)。
#define _crt_secure_no_warnings
#include#include#includeint main(int argc, char *argv)
else
printf("請通過鍵盤給陣列賦值:\n");
//通過鍵盤給該陣列賦值
//fgets(p, sizeof(n * sizeof(int)), stdin);
//初始化
for (size_t i = 0; i < n; i++)
//列印陣列元素
for (size_t i = 0; i < n; i++)
//釋放空間
if (p != null)
//遍歷p
for (size_t i = 0; i < n; i++)
system("pause");
return 0;
}
c語言中的malloc
今天想去練習一下二叉樹的使用的,使用前就必須要建立乙個二叉樹啊。我用的是前序式的建立方法,都是通過呼叫子函式createtree來建立乙個樹 先建立根 左孩子 右孩子 是通過遞迴的方法的。但是當我測試的時候,每次訪問樹根的都會出錯,原來建立的二叉樹根本就沒有儲存在主函式的head中,我用單步除錯發現...
C語言中malloc函式實現
該實現使用大容量的靜態陣列作為堆,但也可使用作業系統呼叫分配堆。定義了乙個資料型別header儲存每個儲存器塊的簿記資訊,定義了具有header型別元素的堆陣列,這樣就可以很容易地將簿記資訊儲存在儲存器塊中。型別header包含了3塊資訊 指向列表的下乙個塊的指標,當前分配空間的長度,後面的自由空間...
C語言中 malloc函式用法
一 malloc 和free 的基本概念以及基本用法 1 函式原型及說明 void malloc long numbytes 該函式分配了numbytes個位元組,並返回了指向這塊記憶體的指標。如果分配失敗,則返回乙個空指標 null 關於分配失敗的原因,應該有多種,比如說空間不足就是一種。void...