動態記憶體及釋放記憶體崩潰原因
阿新 • • 發佈:2018-12-06
動態記憶體及釋放記憶體崩潰原因
之前有提到字串的定義是無法將陣列長度寫成變數的,那麼,我們在工作中就受到了很大的侷限性,所以我們引入例如動態記憶體。
1、 malloc(申請多少個位元組)
需要引用的標頭檔案為#include<stdlib.h>
小套路:
int *p = (int *)malloc(n * sizeof(int));
等同於int p[n];
2、 calloc(將所有元素初始化為0)
int *p = (int *)calloc(n * sizeof(int));
相當於:
int *p= (int *)malloc(n * sizeof(int));
for(inti = 0;I < 10;i++)
{
p[i] = 0;
}
3、 realloc(用來改變動態記憶體的大小)
p = (int *)realloc(p, 20* sizeof(int));
4、 free(記憶體洩漏)釋放記憶體,如果不釋放,記憶體就會洩漏。
free不需要長度是因為有頭和尾資訊。
free()崩潰的原因:
1、 越界(漏寫sizeof,realloc第二個引數寫錯)
2、 修改指標的指向。
3、 重複釋放同一段記憶體。
4、 釋放非動態記憶體。