1. 程式人生 > >動態記憶體及釋放記憶體崩潰原因

動態記憶體及釋放記憶體崩潰原因

動態記憶體及釋放記憶體崩潰原因

之前有提到字串的定義是無法將陣列長度寫成變數的,那麼,我們在工作中就受到了很大的侷限性,所以我們引入例如動態記憶體。

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、      釋放非動態記憶體。