動態記憶體分配 malloc 和free

2021-09-18 04:23:39 字數 969 閱讀 4813

1、通過查詢gcc的man手冊,我們可以看到malloc的函式原型:

void *malloc(size_t size);     //分配長度為size位元組的記憶體塊
(1)返回值是void指標,void*表示未確定型別的指標,void *可以指向任何型別的資料,指標指向的型別是不確定的,這個指標在需要的時候可以被強制轉化成其他任何一種確定型別的指標。

(2)malloc只管分配記憶體空間,並不能對分配的空間進行初始化,所以申請到的記憶體中的值是隨機的,經常會使用memset()或者bzero()進行置0操作後再使用。

(3)free()函式原型:

void free(void *ptr);     //free()的引數是一指標,指向由malloc()分配的記憶體塊
對應每個malloc()呼叫,應該呼叫一次free(),提高資源利用率,釋放後堆管理器就可能把這段記憶體再次分配給其它程序,釋放之後你就不能再使用了。

若沒有使用free()函式,則程式可能會出現溢位的情況,也就是我們所說的記憶體洩漏,或者「吃記憶體」。

2、**演示

第一步:申請和繫結

int *p = (int *)malloc(100*sizeof(int));    //分配100個int型儲存單元,並把p指向該空間所在位置
第二步:檢驗分配是否成功

if (null == p)

第三步:使用申請到的記憶體

*(p+0) = 1;

*(p+1) = 2;

printf("*(p+0) = %d.\n", *(p+0));

printf("*(p+1) = %d.\n", *(p+1));

第四步:釋放

free(p);

p = null;

malloc函式 動態記憶體分配

malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void 型別。void 表示未確定型別的 指標。c,c 規定,void 型別可以 強制轉換 為任何其它型別的指標。原型 extern void malloc unsigned int num bytes 標頭檔案 在tc2....

靜態記憶體分配和 動態記憶體分配

1 靜態記憶體分配是在編譯時完成的,不需要占用cpu資源 動態分配記憶體是在執行時完成的,動態記憶體的分配與釋放需要占用cpu資源 2 靜態記憶體分配是在棧上分配的,動態記憶體是堆上分配的 3 動態記憶體分配需要指標或引用資料型別的支援,而靜態記憶體分配不需要 4 靜態分配記憶體需要在編譯前確定記憶...

動態記憶體分配

在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...