C C 分配記憶體空間

2021-07-22 08:34:10 字數 1508 閱讀 5215

【方法】c:malloc、calloc、realloc、free;            c++:new、delete

【函式原型】:請求成功返回空間首位址,失敗返回

null

#include

void *

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開始的,第二行是全域性棧區所佔...