C和C 動態記憶體分配和釋放的區別

2021-06-26 09:37:26 字數 2317 閱讀 9440

一、先來談談在

c語言下,動態記憶體分配和釋放的特點。

動態分配記憶體的定義是這樣的,指在程式執行過程中,要申請記憶體,系統會根據程式的實際情況來分配,分配空間的大小是由程式的需求來決定的。在

c語言下面,舉個例子,定義乙個指標,

int *p;

此時指標

p是乙個野指標,是乙個指向不確定位置的指標,對它進行操作是很危險的,此時我們需要動態分配記憶體空間,讓

p指向它。而有一種形式是這樣的

,int *p=&b; 

這並非是一種動態記憶體分配方式,而是一種指標的初始化,把變數

b的首位址給了指標p。

在c語言下究竟如何實現動態記憶體分配的呢?這裡提供了幾個函式來實現,分別是

malloc(),calloc(),realloc(),

而釋放記憶體的函式為

free()

,分別**他們的異同。

1.malloc

函式函式原型為

void *malloc(unsigned int size)

;在記憶體的動態儲存區中分配一塊長度為

"size"

位元組的連續區域。函式的返回值為該區域的首位址。

「型別說明符

」表示把該區域用於何種資料型別。

(型別說明符

*)表示把返回值強制轉換為該型別指標。

「size」

是乙個無符號數。例如:

pc=(char *) malloc (100);

表示分配

100個位元組的記憶體空間,並強制轉換為字元陣列型別,函式的返回值為指向該字元陣列的指標,

把該指標賦予指標變數

pc。若

size

超出可用空間,則返回空指標值

null

。2.calloc

函式函式原型為

void *calloc(unsigned int num,unsigned int size)

按所給資料個數和每個資料所佔位元組數開闢儲存空間。其中

num為資料個數,

size

為每個資料所佔位元組數,故開闢的總位元組數為

num*size

。函式返回該儲存區的起始位址。

calloc

函式與malloc

函式的區別僅在於一次可以分配

n塊區域。例如:

ps=(struct stu*) calloc(2,sizeof(struct stu));

其中的sizeof(structstu)

是求stu

的結構長度。因此該語句的意思是:按

stu的長度分配

2塊連續區域,強制轉換為

stu型別,並把其首位址賦予指標變數ps。

3.realloc

函式:函式原型為

void*realloc(void *ptr, unsigned int size)

重新定義所開闢記憶體空間的大小。其中

ptr所指的記憶體空間是用前述函式已開闢的,

size

為新的空間大小,其值可比原來大或小。函式返回新儲存區的起始位址(該位址可能與以前的位址不同)。例如

p1=(float*)realloc(p1,16);

將原先開闢的

8個位元組調整為

16個位元組。

**動態申請的記憶體空間要進行手動用

free

()函式釋放4.

free

函式:函式原型為

voidfree(void *ptr)

將以前開闢的某記憶體空間釋放。函式原型為

voidfree(void *ptr)

其中ptr

ptr所指向的空間必須是前述函式所開闢的。例如

free((void*)p1);

將上例開闢的

16個位元組釋放。可簡寫為

free(p1);

由系統自動進行型別轉換。

二、c++

語言動態記憶體分配

c++語言中用

new和

delete

來動態申請和釋放記憶體。

1. 申請單個物件

int *p;

p=new int;

或者p=new int(value);

2. 動態申請陣列

int *p;

p=new int [100];

這樣可以申請長度為

100的陣列,但是不能進行初始化。

3. delete

int *p, *q;

p=new int;

q=new int[10];

delete p;

delete [ ]q;

C和C 動態記憶體分配和釋放的區別

一 先來談談在c語言下,動態記憶體分配和釋放的特點。動態分配記憶體的定義是這樣的,指在程式執行過程中,要申請記憶體,系統會根據程式的實際情況來分配,分配空間的大小是由程式的需求來決定的。在c語言下面,舉個例子,定義乙個指標,int p 此時指標i是乙個野指標,是乙個指向不確定位置的指標,對它進行操作...

C和C 動態記憶體分配和釋放的區別

其中一道很基礎的問題是問c和c 在動態記憶體分配,釋放方面的區別。作為乙個勵志成為c和c 軟體開發人員,居然連這個問題都解答的含糊不清,深感慚愧,這才認真總結一番。一 先來談談在c語言下,動態記憶體分配和釋放的特點。動態分配記憶體的定義是這樣的,指在程式執行過程中,要申請記憶體,系統會根據程式的實際...

C 動態記憶體的分配和釋放

1,new和delete的基本使用形式。用new用於堆內的記憶體的分配的基本形式 指標變數名 new 型別 1定義乙個整型指標將變數 int p p new int 指標變數名 new 型別名 初值 用delete用於new分配的堆記憶體的釋放 語法形式 delete 運算子例子 include u...