一級指標的動態記憶體申請

2021-10-09 22:57:26 字數 2166 閱讀 2697

動態記憶體申請的三大函式:

1.void *malloc (size_t,size);

特點:申請的記憶體不會被初始化

2.void *calloc(size_t count,size_t size );

特點:會給申請的記憶體初始化

數字類:初始值為0

字元類:初始值為\0

3.void *realloc(void *p,size_t size);

特點:再申請的過程

指標的動態記憶體申請就是把指標變成變數的過程

申請的是堆記憶體

步驟:1.動態記憶體申請

2.為變數賦初值

2.釋放記憶體,並置空處理

注意點:1.記憶體釋放若沒做置空處理,會產生野指標(沒有初始化的指標)造 成記憶體洩露

2.同一段記憶體不能重複釋放,否則會引發程式中斷

1. void *malloc (size_t,size);
//1.動態記憶體申請(申請單個記憶體)

int*p=

(int*)

malloc

(sizeof

(int))

;//2.為變數賦初值

//*位址--->代表變數(前提是位址的存在)

*p=1001

;printf

("%d"

,*p)

;//3.釋放記憶體,並置空處理

free

(p);

p=null

;

//一級指標成為陣列(申請多個記憶體)

int*array=

(int*)

malloc

(sizeof

(int)*

10);for

(int i=

0;i<

10;i++

)for

(int i=

0;i<

10;i++

)free

(array)

; array=

null

;

2.void *calloc(size_t count,size_t size );

int

*pcalloc=

(int*)

calloc(10

,sizeof

(int))

;for

(int i=

0;i<

10;i++

)free

(pcalloc)

; pcalloc=

null

;//釋放後可以重新申請記憶體

pcalloc=

(int*)

calloc(1

,sizeof

(int))

;printf

("%d"

,*pcalloc)

;free

(pcalloc)

; pcalloc=

null

;

3.void *realloc(void *p,size_t size);

int

*prealloc=

(int*)

malloc

(sizeof

(int)*

2); prealloc[0]

=101

; prealloc[1]

=102

;printf

("prealloc=%d\n"

,prealloc)

; prealloc=

(int*)

realloc

(sizeof

(int)*

4);//再申請的記憶體應當比之前的要大

prealloc[2]

=103

; prealloc[3]

=104

;printf

("prealloc=%d\n"

,prealloc)

;for

(int i=

0;i<

4;i++

)printf

("\n"

);

指向指標的指標申請動態記憶體

在 高質量c程式設計指南 中,提到了如果函式的引數是乙個指標,那麼別指望它能申請動態記憶體。如下 include include void getmemory char p,int num int main void getmemory char p,int num 最後的輸出的stu的結果是0,即...

指標作為函式引數,申請動態記憶體方法

void getptr int p,int num void main 錯誤的 void getptr int p,int num void main 首先要說明的是int ptr,這時候ptr指向乙個不明確的位址,在這種情況下getptr ptr,10 這一句傳乙個位址給getptr裡面的p指標,...

關於動態記憶體申請的指標該如何釋放?

示例 include includechar tobin int num else flag 1 result 32 0 return result int main printf c n free a 該記憶體使用完後可以被釋放了,不然會一直占用記憶體 a null return 0 在我理解中,...