示例
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 取得視窗標題。需要在引數中給出儲存...