堆記憶體的分配和釋放

2021-08-09 11:31:46 字數 1738 閱讀 7599

示例

int i = 10;

int *p = (int *)malloc(sizeof(int)) // 在堆中分配乙個整數大小的記憶體.

printf("%p, %d\n", &i, i);

printf("%p, %d\n", p, *p);

free(p); // 必須要手動釋放堆記憶體.

特殊示例:

int main()

void test(char *p)

列印結果:null

原因:s指標指向的是空位址->空位址賦值給p->p指向了乙個新的堆位址->p進行字串賦值->

s還是指向的空位址->列印字串s結果為null

int main()

void test(char *p)

列印結果:hello

int main()

void test(char **p)

列印結果:hello

解析:s指向了空位址->s將自己的位址傳遞給p->*p申請堆空間(s的值也就指向了堆空間)->

*p賦值(相當於s進行字串賦值)->輸出字串

calloccalloc(size, sizeof(int))

calloc(4, sizeof(int)) // calloc會將自動分配的記憶體清0

相當於:

malloc(4 * sizeof(int)) // 分配的記憶體不會清0

memset(p, 0, 4 * sizeof(p) // 手動清0

int i[10] = ;

memset(i, 0, sizeof(i)) // 分配的陣列記憶體清0

實現動態分配記憶體:

#include

#include

#include

void init_array(char *s);

void add_array(char *s);

char *array = null;

int main(int argc, char *argv)

void init_array(char *s)

}void add_array(char *s)

else

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

free(array);

array = temp;}}

realloc()重新分配記憶體位址

array = realloc(array, a+b+1)

void add_arrary_new(char *s)

}

堆的分配和釋放

void malloc size t size void calloc size t count,size t size malloc函式在堆中分配引數 size指定大小的記憶體,單位 位元組,函式返回void 指標。calloc函式分配記憶體的同時把記憶體清空。第乙個引數是所需記憶體單元數量,第二...

記憶體分配和釋放

自從學習了c語言,老師就教導我們說 對於動態記憶體的申請和釋放,一定要遵守 誰申請,誰釋放 的原則。在此原則的指導下,不僅是我 不僅是你,就連特級大師都設計了這樣怪怪的函式 函式說明 getwindowtext hwnd,lptstr,int 取得視窗標題。需要在引數中給出儲存標題所使用的記憶體指標...

記憶體分配和釋放

三 記憶體分配和釋放 自從學習了c語言,老師就教導我們說 對於動態記憶體的申請和釋放,一定要遵守 誰申請,誰釋放 的原則。在此原則的指導下,不僅是我 不僅是你,就連特級大師都設計了這樣怪怪的函式 函式說明 getwindowtext hwnd,lptstr,int 取得視窗標題。需要在引數中給出儲存...