動態記憶體 free函式釋放記憶體時可能出現的問題

2021-09-12 03:10:25 字數 779 閱讀 9006

一、什麼是動態記憶體的申請和釋放?

當程式執行到需要乙個動態分配的變數時,必須向系統申請取得堆中的一塊所需大小的儲存空間,用於儲存該變數。當不再使用該變數時,也就是它的生命結束時,要顯式釋放它所占用的儲存空間,這樣系統就能對該堆空間進行再次分配,做到重複使用有限的資源。

二、我們先來看看幾個基本的關於申請和釋放動態記憶體的函式:

malloc : 申請記憶體(位元組數)

calloc : 初始化為 0

realloc : 修改記憶體大小(擴大、縮小)

free : 釋放記憶體,否則記憶體洩漏

1. 越界

eg:

#include#includeint main()

printf("abc\n");

free(arr);

return 0;

}

2. 指標的指向發生改變

eg:

#include#includeint main()

free(p);

return 0;

}

3. 重複釋放同一段記憶體

eg:

#include#includeint main()

4. 釋放不是動態開闢的記憶體

eg:

#include#includeint main()

C中的動態記憶體分配和釋放 free

c 整合 new 和 delete 操作進行動態記憶體分配,但是在 c 語言中無效。c 語言中使用函式庫來解決,即在頭 在 c 中稱為 中定義的函式 malloc,calloc realloc,free 這些函式在 c 中依然有效。但是使用上面函式分配的記憶體塊和用 new 返回的並不一定相容,不要...

動態記憶體建立與釋放

使用時應加上標頭檔案 include 一.申請動態記憶體 申請動態記憶體 malloc calloc realloc,申請的動態記憶體分為多少份此函式無法明確,所以應在malloc calloc realloc前面加上型別 1.malloc malloc函式的形參為所要申請的動態記憶體位元組數 動態...

動態記憶體分配 malloc 和free

1 通過查詢gcc的man手冊,我們可以看到malloc的函式原型 void malloc size t size 分配長度為size位元組的記憶體塊 1 返回值是void指標,void 表示未確定型別的指標,void 可以指向任何型別的資料,指標指向的型別是不確定的,這個指標在需要的時候可以被強制...