動態記憶體
malloc 動態申請記憶體
int *arr=(int*)malloc(n*sizeof(int)) //int arr[n]
定義乙個n長度的陣列;
如果要使用,需引用標頭檔案
需注意:
1.棧的大小1m,可配;
2.堆的分配的最大連續塊1.2g
calloc動態申請記憶體,並將裡面的值置為0
int*arr=(int *)calloc(a,sizeof(int))
等同於:
int*arr=(int*)malloc(a*sizeof(int))
for(int i=0;i
relloc重新申請動態記憶體
比如我們第一次申請了a個格仔的動態記憶體,但是發現不夠用,我們需要申請2a個格仔的動態記憶體。
int*arr=(int *)relloc(arr,2*a*sizeof(int));
以上等同於
int*arr=(int *arr)malloc(a*sizeof(int));
int*brr=(int *arr)malloc(2*a*sizeof(int));
for(i=0;i
arr=brr;
brr=null;
會有記憶體洩漏問題
解決方法free
//free 釋放,解決記憶體洩漏
原因:1.越界,漏乘sizeof,relloc第二個引數寫錯
2.指標沒有指向首位址(改變位址指向)
3.重複釋放記憶體
4.釋放的不是動態申請的記憶體
關於動態記憶體申請的指標該如何釋放?
示例 include includechar tobin int num else flag 1 result 32 0 return result int main printf c n free a 該記憶體使用完後可以被釋放了,不然會一直占用記憶體 a null return 0 在我理解中,...
C語言動態記憶體申請分析
1 c語言中的一切操作都是基於記憶體的 2 變數和陣列都是記憶體的別名 1 記憶體分配由編譯器在編譯期間決定 2 定義陣列的時候必須指定陣列的長度 3 陣列的長度是在編譯期間就必須確定的 1 malloc和free用於執行動態記憶體分配和釋放 2 malloc所分配的是一塊連續的記憶體 3 mall...
指向指標的指標申請動態記憶體
在 高質量c程式設計指南 中,提到了如果函式的引數是乙個指標,那麼別指望它能申請動態記憶體。如下 include include void getmemory char p,int num int main void getmemory char p,int num 最後的輸出的stu的結果是0,即...