C語言動態申請

2021-09-12 19:49:14 字數 1040 閱讀 1448

由於陣列在宣告的時候總要顯式的指定乙個長度,容易造成空間浪費或者空間不夠用,使用不夠靈活,所以使用了動態的申請

動態空間與直接宣告的變數不同,直接宣告的變數在棧記憶體中,當**塊執行完畢,棧記憶體的變數會自動釋放;但是動態申請的變數在堆記憶體中,**塊執行完畢後如果不手動釋放這塊記憶體,它也仍然被占用,就會引起記憶體洩漏

一想到動態記憶體,請一定要記得,動態記憶體使用完成後,一定要用free()函式釋放

上面就是malloc的函式原型

引數型別size_t是乙個無符號的整型,引數表示要申請記憶體的位元組數。

返回值void *,如果申請成功,返回首位址,失敗返回null

舉例:

int *a = (int *)mallco(10 * sizeof(int))//申請乙個長度為10的整型陣列,記得強制型別轉換

...free(a);//釋放

上面的例子有乙個很糟糕的地方,就是沒有判斷是否申請成功,如果不成功,下面的操作有很大的可能會造成程式崩潰

//避免直接呼叫malloc  

#include #include #define malloc(type, num) (type *)alloc(sizeof(type) * num)

void *alloc(size_t size)

return ptr;

}

函式功能與malloc類似,有兩個不同點

1. 引數不同,num是要申請多少個元素的空間,element_size是每個元素的大小,例如: (int *)calloc(10, sizeof(int));

2. calloc申請的記憶體會被初始化為0,有這個需求會比malloc更好用,但是,要消費更多的代價。

這個函式的作用是用來重新開闢空間,如果空間比原來的大,保留原內容;如果空間更小,內容會被截斷。

2019/3/18 12:10:39

C語言動態記憶體申請分析

1 c語言中的一切操作都是基於記憶體的 2 變數和陣列都是記憶體的別名 1 記憶體分配由編譯器在編譯期間決定 2 定義陣列的時候必須指定陣列的長度 3 陣列的長度是在編譯期間就必須確定的 1 malloc和free用於執行動態記憶體分配和釋放 2 malloc所分配的是一塊連續的記憶體 3 mall...

c 動態申請空間

使用new申請空間 特點 1 沒有名字,只能通過指標間接訪問它們。2 從堆中申請空間 分類 變數 語法 指標變數 new 型別名 delete 指標變數 舉例 int p p new int delete p 初始化 p 90 p new int 99 一維陣列 語法 指標變數 new 型別名 下標...

c 的動態申請記憶體

一維陣列動態申請,c陣列大小為 n int c new int n 二維陣列動態申請,b陣列大小為 n p int b new int n for int i 0 ib i new int p 三維陣列動態申請,a陣列大小為 m n p int a new int m for i 0 i另外,當不再...