一般的變數在定義是就要確定大小,但是有的時候不知道使用者的需要,就比如說排序,你不知道使用者想要給幾個數排序,所以為了保險起見往往是定義乙個很大的變數,而實際上使用者可能只需要給5個數排序,你卻int k[1024];來存放要排序的數,造成極大的浪費。這裡介紹乙個函式用於動態分配空間:malloc
原型
extern void *malloc(unsigned int num_bytes);
標頭檔案
#include #include
宣告
void *malloc(size_t size);
注意:這裡的void*是指不確定的型別,即可以給各種型別的變數分配空間。
示例
int nsize;//要使用多大的空間
scanf("%d",&nsize);//獲取要使用多大的空間
//動態分配空間
int *k;
k = (int*)malloc(nsize);//分配nsize大小的空間給k
//...執行其他**
free(k);//釋放掉分配給k的空間
k = null;//清空
**中之所以要在malloc前加上(int*)是因為malloc原本是void型的,要分配給乙個int*型的變數,必須要進行型別轉換。同樣,malloc也可以分配空間給別的型別的變數,也要轉換成適當型別。malloc分配的空間使用完後要清空然後用free(變數名)釋放掉,否則占用的記憶體會越來越大。
如果申請失敗
malloc也有申請空間失敗的時候,那麼就可以加個判斷:
k = (int*)malloc(nsize);
if (k == null)//如果分配失敗,因為如果分配成功了那k就有值。
return 0;
注意
malloc 只會分配記憶體,不會對分配的記憶體進行初始化,所以分配到的記憶體的值是隨機的。
如果分配的記憶體不是乙個變數(如malloc(nsize))而是有乙個具體的值,那麼應該這麼寫:
k = (int*)malloc(sizeof(int) * 64);//64是要分配的空間,如果是分配給其他型別的變數,其中的sizeof的引數也要有所改變。
儲存空間動態分配
ansi c說明了三個用於儲存空間動態分配的函式 1 malloc 分配指定位元組數的儲存區。此儲存區中的初始值不確定 2 calloc 為指定長度的物件,分配能容納其指定個數的儲存空間。該空間中的每一位 bit 都初始化為0 3 realloc 更改以前分配區的長度 增加或減少 當增加長度時,可能...
C語言動態分配記憶體
動態開闢記憶體的函式 void malloc size t size 這個函式向記憶體申請 塊連續可 的空間,並返回指向這塊空間的指標 如果開闢成功,則返回 個指向開闢好空間的指標 如果開闢失敗,則返回 個null指標,因此malloc的返回值 定要做檢查 返回值的型別是 void 所以malloc...
C語言動態分配記憶體知識
陣列的長度必須事先指定,只能是常整數,不能是變數 傳統形式定義的陣列,該陣列的記憶體程式設計師無法手動釋放,只能在定義 該陣列的函式使用完畢後,釋放陣列占用的記憶體。陣列的長度一旦定義,其長度就不能更改。傳統形式定義的陣列不能跨函式使用。動態記憶體分配可以很好的解決傳統陣列的缺點。傳統陣列也被稱之為...