1.引入
我們之前已經學習了幾種開辟內存空間的方式:
(1)int a=10;開辟4個字節大小的空間
(2)int arr[10]={0}定義數組開辟了一串連續的空間
2.malloc和free
(1)malloc開辟內存空間可能會失敗,因此需要檢查是否為空指針
(2)malloc返回void*類型,指針p是int*類型,因此需要強制類型轉換
(3)malloc申請到空間以后,直接返回這塊空間的起始地址,不會初始化空間的內容
(4)malloc申請的空間,只有程序退出的時候才會還給操作系統,當程序不退出的時候,動態申請的內存,需要使用free釋放空間
(5)free釋放空間之后,需要及時的置為空指針
(6)free,malloc的聲明都放在stdlib.h的頭文件里面的;
3.calloc
(1)這個函數和malloc用法基本相同,不同的地方就是參數不同,這個有2個參數,第一個是個數(徐要開辟空間的個數),第二個就是單個空間的大小
(2)這個函數不像malloc函數,返回空間起始地址,這個會初始化全部為0;
4.realloc
(1)realloc也有2個參數,它可以隨時改變我們申請的內存空間的大小,因為有的時候我們申請的
內存空間可能會不夠
(2)這里是原來申請40字節的空間,后來改成了80字節;
這里會有2種情況,
-----1.與之相鄰的連續空間足夠可以容納80字節
-----2.與之相鄰的連續空間不夠,這個時候會重新開辟80字節空間,把原來的40字節空間里面的數
據復制過去,然后是釋放掉原來的空間(這個釋放不需要我們自己進行)
(3)如果是重新開辟80字節的空間,就有可能開辟失敗,這個時候如果我們直接給p,就有可能
原來的空間不見了,新的空間也沒有,造成內存的泄露
(4)我們先給ptr指針,如果這個不是NULL,我們再傳給p,就可以避免上面的內存泄漏問題了
(5)如果realloc里面的第一個參數是空指針,他的功能就和malloc完全相同