全域性變數:分配到 記憶體的靜態區。區域性變數(非靜態):分配到 記憶體的動態區。在儲存區中稱為棧(stack)
臨時資料(c允許記憶體動態分配區域):存放在自由空間區,稱為堆區(heap)
記憶體動態分配 得益於四個庫函式實現 (malloc calloc free realloc)
呼叫庫函式
void *不指向任何資料,只提供位址。如未成功執行(記憶體空間不足),則返回空指標
1 malloc函式 //
動態儲存區
void *malloc(unsigned int
size)
作用:記憶體的動態區域 分配長度為size 的連續空間。
返回值 是分配區域的第乙個位元組位址,分配區域的開頭為止。
maclloc(
100)//
分配100位元組的臨時分配域,函式值為第乙個位元組位址。
ps:貌似 是給 區域性變數/臨時資料 分配記憶體空間的?????
2 calloc函式 //
動態儲存區
void *calloc(unsigned n,unsigned size)
作用:記憶體動態儲存區中分配長度為size的連續空間,這個空間比較大,足夠存個陣列。
p = calloc(50,4)//
開闢50*4個自己的臨時分配域,把起始位址賦給指標變數p
ps:貌似 是給 區域性變數/臨時資料 分配記憶體空間 但是比較大額的?????
3free函式
void free(void *p)
作用:釋放指標變數p所指向的動態空間,使者部分空間能夠重用,注意是空間,沒說「指標「
free(p)
//釋放指標變數p 所指向的已分配的動態空間
ps:釋放指標變數的方法。
4realloc函式
void *relloc(void *p,unsigned int
size)
如果通過mollie函式或是calloc 獲取動態空間 想改變其大小,可以用recalloc函式重新分配。
realloc(p,
50) //
重置指標變數p的動態儲存空間為50位元組。
ps:重置已經分配的指標變數的空間。
小結:四個庫函式
1/2在動態儲存區內 給變數分配儲存空間(大小區別)
3釋放指標變數的儲存空間
4 重置 指標變數的儲存空間
C語言動態分配記憶體問題
動態分配記憶體和直接分配記憶體區別 1.直接分配記憶體,如int p 是分配在棧上的,可以對其初始化 2.動態分配記憶體,int p malloc 100 是分配在堆記憶體上的 free 釋放記憶體問題 free函式只能對動態分配的記憶體進行釋放,釋放後該指標仍保留位址,但是記憶體被釋放,成為野指標...
C語言動態分配記憶體
動態開闢記憶體的函式 void malloc size t size 這個函式向記憶體申請 塊連續可 的空間,並返回指向這塊空間的指標 如果開闢成功,則返回 個指向開闢好空間的指標 如果開闢失敗,則返回 個null指標,因此malloc的返回值 定要做檢查 返回值的型別是 void 所以malloc...
C語言動態分配記憶體知識
陣列的長度必須事先指定,只能是常整數,不能是變數 傳統形式定義的陣列,該陣列的記憶體程式設計師無法手動釋放,只能在定義 該陣列的函式使用完畢後,釋放陣列占用的記憶體。陣列的長度一旦定義,其長度就不能更改。傳統形式定義的陣列不能跨函式使用。動態記憶體分配可以很好的解決傳統陣列的缺點。傳統陣列也被稱之為...