有關動態記憶體的幾個函式

2021-08-07 10:19:58 字數 1210 閱讀 3006

1、malloc():申請動態記憶體

int *p = (int *)malloc(n*sizeof(int));//申請n個int型

char *p1 = (char *)malloc(10*sizeof(char));//申請10個char型

double *p2 = (double*)malloc(10*sizeof(double));//申請10個double型

char **p3 = (char **)malloc(20*sizeof(char *));//申請20個char *型

注意:利用malloc申請記憶體空間,要利用free釋放記憶體,否則會出現記憶體洩漏(洩露),記憶體會越來越少,執行速度會越來越慢。

解決方法:(1)程式退出,作業系統將程式消耗的記憶體全部**;

(2)關機

2、free():釋放記憶體空間

free(p);

free(p1);

free(p2);

free(p3);

注意:free()崩潰的原因:(1)越界

(2)指標的指向移動

(3)重複釋放

3、calloc():記憶體空間全部置為零

int *p = (int *)malloc(10*sizeof(int));

//迴圈的方法

for(int i = 0;i < 10;i++)//將每個格仔賦值為0

//calloc()函式

//很少使用

int *p = (int *)calloc(10,sizeof(int));//第乙個引數是個數,第二個引數是位元組長度

4、realloc():記憶體不夠用,擴容

int *p = (int *)malloc(10*sizeof(int));//原來的10個記憶體空間

//在使用過程中發現p長度不夠,需要擴充套件成20個記憶體空間

//迴圈的方法

int *q = (int *)malloc(20*sizeof(int));

for(int i= 0;i < 10;i++)

free(p);

p = q;

q = null;

//realloc()函式

p = (int *)realloc(p,20*sizeof(int));

動態記憶體及相關函式

malloc 申請記憶體 calloc 初始化為0 realloc 修改記憶體大小 擴大,縮小 free 釋放記憶體,記憶體洩漏 malloc int arr int malloc nsizeof int malloc函式只調出申請的空間,返回所調出空間的首位址,需強轉成需要的資料型別 calloc...

malloc函式 動態記憶體分配

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

動態記憶體的問題

函式體內的區域性變數在函式結束的時候不會自動消亡 1 指標消亡了,並不代表它所指的記憶體會自動釋放。2 記憶體被釋放了,並不代表指標會消亡或者成為null。野指標 不是null指標,而是指向 非法 記憶體的指標,人們一般不會錯用null指標,因為if語句很容易判斷,但是 野指標 很危險,if語句對它...