C語言 關於記憶體動態分配問題

2022-08-01 23:06:15 字數 1207 閱讀 9556

全域性變數:分配到 記憶體的靜態區。

區域性變數(非靜態):分配到 記憶體的動態區。在儲存區中稱為棧(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語言動態分配記憶體知識

陣列的長度必須事先指定,只能是常整數,不能是變數 傳統形式定義的陣列,該陣列的記憶體程式設計師無法手動釋放,只能在定義 該陣列的函式使用完畢後,釋放陣列占用的記憶體。陣列的長度一旦定義,其長度就不能更改。傳統形式定義的陣列不能跨函式使用。動態記憶體分配可以很好的解決傳統陣列的缺點。傳統陣列也被稱之為...