目錄
1.為什么會有動態記憶體管理
2.記憶體的存盤形式:?
3.動態記憶體函式的介紹: malloc free calloc realloc
—、malloc函式
二、free函式
1.為什么會有動態記憶體管理
我們都知道申請記憶體有兩個方法 :
1.變數加變數名
如 int a=10;這就向記憶體記憶體中申請了四個位元組的空間用來存放a的地址,
2.變數名加陣列名
如 char arr[10]={0};這就向記憶體中申請了10個位元組的空間用來存放陣列arr的地址,
上面這兩種方式有一定的局限性,如我們創建了一個int arr[10],后續發現我有30個元素,
這樣就存放不了,反之也是一樣的道理,但是有些小伙伴初學的時候容易寫成下面的代碼,

以為做到了想多少輸多少,其實是錯誤的,因為對于陣列來說下標必須是常量或常量運算式,否則會報錯,
2.記憶體的存盤形式:
3.動態記憶體函式的介紹 malloc free calloc realloc
—、malloc函式
函式介紹:1.malloc是進行記憶體申請的函式,若申請成功則會回傳一個指向所申請的空間地址的指 針,若申請失敗,則會回傳一個NULL(空指標),注:要使用時得判斷回傳的是否是空 指標,非空才能繼續使用,(頭檔案是<stdlib.h>或<malloc.h>)
2.函式的引數形式:void*malloc(size_t size)
3. void*是可以接受任意型別的指標(記得的強制型別轉化成要接受的指標型別),
4. size_t 表示的是unsigned int 無符號整型 ,size表示所要申請的空間單位是位元組,
5.要和free函式配套使用(下文會講),
malloc函式使用的例子:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<errno.h>
int main()
{
int* p=(int*)malloc(40);//強制型別轉化成int*,malloc向記憶體中申請40位元組空間
if(p==NULL)
{
printf("%s",strerror(errno));//列印錯誤碼所對應的錯誤資訊,
return 0;//若為空則退出函式
}
for(int i=0;i<10;i++)
{
*(p+i)=i; 賦值
printf("%d ",*(p+i));列印
}
free(p);//釋放p所指向的空間
p=NULL;//切斷p和原來地址的聯系
return 0;
}
二、free函式
free函式介紹:1.free函式是專門用來釋放動態記憶體開辟的空間的一的函式,和其他和其他動態內 存申請的函式配套使用(相當于一個去借一個去還),
2.函式的引數形式void free(void*ptr)其中void*ptr是所要釋放的指標
注意:1.如果所釋放的指標不是動態記憶體申請的,那free函式是不會釋放的,并且 會導致程式崩潰,所以對于free函式的使用必須是動態記憶體函式申請的,
2.如果是free(NULL);那么free函式什么也不做,程式也不會報錯,此時的 free函式有跟沒有是一樣的 ,
3.free函式只是釋放了*ptr所指向的空間,但還是可以通過*ptr找到當初所 申請的空間,為了防止錯亂,應將*ptr=NULL,切斷他們的聯系,
freed的使用可以看上面寫過的代碼,
還有兩個下次補充,寫作不易,記得支持一下,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297837.html
標籤:其他
上一篇:【演算法訓練營】(day2)
