C 學習筆記 動態分配記憶體空間

2021-07-04 02:38:29 字數 1530 閱讀 3076

我們在c語言中學過malloc函式,來動態分配記憶體空間,然而在c++中我們用的是new運算子。強調一下,malloc();是函式。而new是運算子,和sizeof()不是函式乙個意思。

我們首先來看看malloc函式。查閱msdn:

void *malloc(

size_t size

);

可以看出,函式返回的是乙個指向空的指標,而函式的行參是乙個size_t的size,size_t是這麼定義的:typedef unsigned int size_t; 也就是說size是乙個unsigned int型別的。那麼問題來了,怎麼讓mallo函式返回乙個指向特定的資料的指標呢。我們可以看msdn給出的例子:

#include // for _max_path definition

#include #include int main( void )

}

_max_path是包含在stdlib.h中的巨集常量,

它定義了編譯器所支援的最長全路徑名的長度(

length   of   full   pathname
記住:一定要free( );

void free( 

void *memblock

);

接著,我們來看看new運算子。

第一種用法:p = new t;// p 是指向t型別的指標,t是任意資料型別。用法,int * ptr = new int; *ptr = 5;delete ptr; //這兩句話的解釋如下,首先給分配乙個int型大小的記憶體空間(4位元組)然後給這個空間的首位址返回給ptr,我們就可以通過*ptr = 5往這塊空間裡面寫數值了。當然,一定要記得delete ptr ;

第二種用法:p = new t[n]; t:任意資料型別,比如char[n],int[n];這句話,就是說,動態分配乙個陣列記憶體,返回的是指向陣列首位址的指標。例如: char *ptr = new char[10]; prt[0] = 'a';delete ptr;//首先給乙個字元陣列分配記憶體,記憶體大小為:10*sizeof(char),這裡不同的是,在delete的時候,一定要注意delete [ ]ptr;否者記憶體將會釋放不乾淨。

延伸一下:memset(); 看msdn就夠了,不需要解釋:

void *memset( 

void *dest, 

int c, 

size_t count 

);

#include #include int main( void )

注意,memset();函式第二個引數是傳入乙個int 型,所以在例子中,我們要'*',即傳入了ascii碼。

舉栗子:int *ptr = new int[5]; memset(ptr,0,5*sizeof(int));這樣就完成了初始化。當然,也可以用乙個for迴圈。

下面是分配乙個二維陣列,10行5列,以及進行memset,自己注意看看。

int **array;

array=new int *[10];

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

C 學習筆記 動態分配記憶體

在c語言中,動態分配記憶體時一般使用malloc 函式,但是對於非內建資料型別 如struct,enum,class等 malloc 與free 無法滿足動態物件的需求,因此c 引入new與delete關鍵字,用來進行記憶體申請與釋放空間。下面是使用 new 運算子來為任意的資料型別動態分配記憶體的...

分配記憶體空間

void calloc size t nobj,size t size 分配足夠的記憶體給nobj個大小為size的物件組成的陣列,並返回指向所分配區域的第乙個位元組的指標 若記憶體不夠,則返回null.該空間的初始化大小為0位元組.char p char calloc 100,sizeof cha...

動態分配記憶體(學習筆記11)

函式原型 stdlib.h void malloc size 分配size大小的記憶體,返回指向所分配記憶體的指標,分配不成功,返回null void calloc num element,length of element 分配num element length of element 大小的記憶...