1. 程式人生 > >小甲魚 P37 38 動態記憶體管理1 2

小甲魚 P37 38 動態記憶體管理1 2

小甲魚 P37 38  動態記憶體管理1 2

下面的庫函式包含在stdlib.h

malloc:申請動態記憶體空間

free:釋放動態記憶體空間

calloc:申請並初始化一系列記憶體空間

realloc:重新分配記憶體空間

malloc

函式原型:void *malloc(size_t size);(void型別可以被轉換成任何一種型別)

malloc函式向系統申請分配size個位元組的記憶體空間,並返回一個指向這塊空間的指標。如果函式呼叫失敗,返回值是NULL。

free

函式原型:void free(void *ptr)

free函式釋放ptr引數指向的記憶體空間。該記憶體空間必須是由malloc、calloc和realloc函式申請的。

PS:該函式不會修改ptr引數的值,所以呼叫它仍然指向原來的地方。

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int *ptr;
	
	//malloc申請的空間位於記憶體的堆
	ptr = (int *)malloc(sizeof(int));//malloc返回型別為void * 
	
	if (ptr == NULL)//記憶體不夠用返回失敗,則NULL
	{
		printf("分配記憶體失敗 !\n");
		exit(1);//異常退出 
	}
	
	printf("請輸入一個整數:");
	scanf("%d", ptr);
	
	printf("你輸入的整數是;%d\n", *ptr);
	free(ptr);//如果不主動釋放堆上的記憶體資源,永遠的存在,知道程式關閉。造成記憶體洩漏 
	
	printf("你輸入的整數是;%d\n", *ptr);
	
	return 0;
	
	
 }