動態記憶體分配

2021-08-17 22:14:03 字數 1349 閱讀 4015

對記憶體的動態分配時通過系統提供的庫函式來實現的,主要有malloc,free,calloc,realloc四個函式,

標頭檔案# include

1.malloc(100)//開闢100位元組,函式值為第乙個位元組的位址,返回值為所分配區域的第乙個位元組的位址如果此函式沒有成功執行,則返回值為空指標,不能初始化

一定要檢查所請求的記憶體是否成功分配。

int a=10;

int *p=(int *)malloc(a*sizeof(int));

assert(p != null);

if(p == null)

//開闢的堆空間用完之後就可以使用free函式釋放

2.p=calloc(n,size)//在動態儲存中分配n個長度為size的連續空間,可初始化為0可為一維陣列開闢動態儲存空間,n為元素個數,size為每個元素的長度,這就是動態陣列

int a=10;

int *p=(int *)malloc(a*sizeof(int))

for(int i=0,i<10;i++)

p[i]=0;

}//等同於int *p=(int*)calloc(10,sizeof(int));

3.free(p)//釋放指標變數p所指向的已分配的動態記憶體空間,free函式無返回值

free崩潰原因:

//1、越界

#include

#include

int main() 

free(p);

return 0;

}//error越界

}//出現越界,free崩潰

//2、指標移動

#include

#include

int main() 

free(p);

free(p);

return 0;

}//error 

//4、釋放棧記憶體

#include

#include

int main() 

free(p);

return 0;

}//error

4.reallo(p,20);//將p所指向的已分配的動態空間改為50位元組,p的值不變

int main()

int *q = (int *)malloc(20*sizeof(int));//80

for(i=0;i<10;i++)

free(p);

p = q;

q = null;

}上面**等同於int*p=(int*)malloc(10*sizeof(int));

int*q=(int*)realloc(p,80);

動態記憶體分配

在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...

動態記憶體分配

為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...

動態記憶體分配

c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...