一、malloc()
void *malloc(size_t size);
功能 傳回值 - 配置設定成功:傳回配置設定的記憶體空間的首位址
- 配置設定失敗:傳回空指針
注意 - 傳回的首位址指針類型是void*類型(因為malloc并不知道你申請的位址存放的是什麼類型的資料,是以傳回通用型指針void*),是以申請完記憶體之後需要強制類型轉換
- 例如:以下ptd指針配置設定了20*8=160個位元組的空間,相當于大小為20個元素的double數組
double* ptd;
ptd=(double*)malloc(20*sizeof(double));
ptd[0]=3.14;
ptd[1]=2.35;
二、calloc()
void *calloc(size_t n, size_t size);
功能 - 功能與malloc是相同的,都是申請記憶體空間
- 但是比malloc多了一個功能,就是把申請的記憶體的所有位都初始化為0
參數 - 參數1:申請多少個機關的記憶體空間
- 參數2:每個機關多大
傳回值 - 配置設定成功:傳回配置設定的記憶體空間的首位址(也是void*類型,需要強制類型轉換)
- 配置設定失敗:傳回空指針
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* arr=(int*)calloc(5,sizeof(int));
for(int i=0;i<5;++i)
printf("%d\t",arr[i]);
printf("\n");
free(arr);
return 0;
}
三、realloc()
void* realloc(void* ptr, unsigned newsize);
功能 - realloc是給一個已經申請了記憶體的指針重新配置設定記憶體
- 即當一個指針指向的記憶體塊不夠或有多餘時可以使用realloc為其重新配置設定合适大小的記憶體
- 如果參數2位NULL,那麼realloc()的功能就與malloc()的功能相同,用于配置設定一個指定長度的空間
參數 - 參數1:原有的空間位址
- 參數2:重新申請的位址空間位元組數
傳回值 - 配置設定成功:傳回配置設定的記憶體空間的首位址(也是void*類型,需要強制類型轉換)
- 配置設定失敗:傳回空指針
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p=(int*)malloc(sizeof(int)*3);
p[0]=1;
p[1]=2;
p[2]=3;
p=(int*)realloc(p,sizeof(int)*4); //重新申請記憶體空間
p[3]=4;
for(int i=0;i<4;++i)
printf("%d\t",p[i]);
printf("\n");
free(p);
return 0;
}
三、free()
功能 - 用來釋放malloc()、realloc()、calloc()函數申請的記憶體空間
- 使用malloc()、realloc()、calloc()申請的記憶體空間如果使用完之後沒有釋放,那麼該位址無法被再通路和再使用,是以需要使用free()釋放申請的記憶體空間
參數
- 案例:每次調用函數都申請一塊記憶體空間,使用完之後釋放
#include <stdio.h>
#include <stdlib.h>
void gobble(double arr[],int n)
{
arr=(double*)malloc(n*sizeof(double));//申請
free(arr); //釋放
}
int main()
{
double myArr[50];
for(int i=0;i<5;++i)
fobble(myArr,50);
return 0;
}