C/C++記憶體分配以及釋放

小腳印流年大人發表於2020-10-23
int *ptr = (int *)malloc(size countSize);//隨機
int *ptr = (int *)calloc(int number,size  itemSize);//預設為0
用 ptr ==nullptr 或者用 ptr == 0來判斷是否分配成功
// 重新分配已有的記憶體
realloc(* _Block,size t_size);
ptr = (int *)realloc(ptr,size t_size);
//若第二次分配的記憶體小於之前的記憶體,已經賦予的值,重新分配後不會改變,重新分配後,地址不變
//若擴充套件記憶體,地址會改變,已經賦予的值不會改變

free(ptr)//釋放記憶體。

c++記憶體分配,底層由malloc實現

資料型別 *指標 = new 資料型別
int *p = new int;
*p = 500;
p[0] = 500;

資料型別 *指標 = new 資料型別[]
int *pr = new int[5];
pr[1] = 500;
pr[2] = 500;
記憶體釋放
delete p;
delete[] p;

動態記憶體風險
1丶野指標(懸掛指標)

2丶記憶體碎片

補充

//複製記憶體 可能會超範圍複製
void *memcpy(void *dst,const void *src,size t_size);

//記憶體填充 可能會超範圍填充
memset(void *src,char val,size t_size);

在這裡插入圖片描述

相關文章