【方法】c:malloc、calloc、realloc、free; c++:new、delete
【函式原型】:請求成功返回空間首位址,失敗返回
null
#includevoid *
malloc
( size_t size );//分配size位元組的連續記憶體,不負責初始化,使用memset初始化。
void *
calloc
( size_t num, size_t size );//分配num個size位元組的連續記憶體,並初始化記憶體為0。
void *
realloc
(void* ptr, size_t size);//將已分配空間的指標ptr,重新申請位址為size位元組長度。
void
free
( void *ptr );//釋放malloc、calloc、realloc的ptr位址空間,最後設定ptr = null;
void *
memset
( void *ptr, void cst, size_t size);//將ptr位址裡size位元組空間的值設定成cst。
memcpy、memmove、memcmp
size_tsizeof(
object
)返回物件所佔的位元組數
:物件盡量是指標或變數,其次是
型別。
【區別】
(1)malloc只負責分配大小,不負責初始化記憶體; calloc即分配記憶體大小,也初始化記憶體為0。
(2)malloc返回的是乙個物件;calloc返回的是乙個陣列,適合為陣列申請空間。
(3)realloc申請的size小於等於原先空間大小,則保持原狀態;大於,則重新分配大小,並將原先內容複製到新空間,原先指標自動釋放,但新分配的空間未初始化,需用memset初始化。
(4)c++中new/delete分配/釋放空間並呼叫構造,都需成對出現。
【例項】
char *str = (char*)malloc( sizeof(char) * 100 );memset( str, 0,sizeof(str) );
int *ip_a = (int *)calloc(5, sizeof(int) );
ip_a = (char *)realloc( ip_a,sizeof(int) * 40 );
分配記憶體空間
void calloc size t nobj,size t size 分配足夠的記憶體給nobj個大小為size的物件組成的陣列,並返回指向所分配區域的第乙個位元組的指標 若記憶體不夠,則返回null.該空間的初始化大小為0位元組.char p char calloc 100,sizeof cha...
記憶體空間與分配
1 記憶體分配錯誤 動態記憶體分配錯誤有兩種基本型別 記憶體錯誤和記憶體洩漏。1 記憶體錯誤 當乙個指標或者該指標所指向的記憶體單元成為無效單元,或者記憶體中分配的資料結構被破壞時,就會造成記憶體錯誤。指標未被初始化,指標被初始化為乙個無效位址,指標被不小心錯誤地修改,在與指標相關聯的記憶體區域被釋...
Linux程式記憶體空間分配
先來看一段簡單 include include int main 執行結果 這時另開乙個終端,輸入cat proc 10073 maps,出現如下顯示 實際上,第一行是 區所佔的記憶體空間,804800 804900,實際上幾乎所有的linux程式 段都是從804800開始的,第二行是全域性棧區所佔...