申請記憶體
阿新 • • 發佈:2022-05-06
這些函式包含在<stdlib.h>標頭檔案中
malloc
int* p = (int*)malloc(100 * sizeof(int));//最好能強制型別轉換
- malloc是申請空間 free是釋放空間 他倆需要成對出現
calloc
*void calloc( size_t num, size_t size );
- Allocates an array in memory with elements initialized to 0.
- 在記憶體中分配元素初始化為0的陣列,等於是開闢出來的空間直接會被初始化為0
- 這裡與malloc申請空間方式不同的是,在()中就聲明瞭開闢的是什麼型別的,多少個。所以前面可以不強制型別轉換
- 其實我們可以把強制型別轉換當成習慣,反正又沒錯,需要什麼轉換什麼就好了
- calloc同樣也要與free成對出現
int* p = (int*)calloc(10,sizeof(int));
if (p == NULL)
{
perror("main");
return 1;
}
//使用
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = 5;
}
realloc
void realloc( void memblock, size_t size );
- 括號中的引數,第一個為要改變空間的首地址,第二個為改變後的大小
- Reallocate memory blocks.
- 有時候需要我們改變申請空間的大小,這時候可以對已經開闢了的空間進行增加或者減小空間操作
//還需要p指向更大空間
//realloc調整空間
int*ptr = (int*)realloc(p, 20000 * sizeof(int));
//需要擴充的空間的地址,需要擴充的大小
//大小不夠,他就置成空指標了
//所以就設定一個*ptr先來接收
if (ptr != NULL)
{
p = ptr;
} //如果空間足夠,就用p來接手
free(p);
p = NULL;
free
- 可以釋放由
malloc\calloc\realloc
函式申請的記憶體空間
allocate
char* recordDate = allocate<char>(20)