小甲魚 P37 38 動態記憶體管理1 2
阿新 • • 發佈:2018-12-12
小甲魚 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; }