1. 程式人生 > 其它 >申請記憶體

申請記憶體

這些函式包含在<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)