malloc,free,new 函數的總結

malloc函數


一、作用

malloc 向系統申請分配指定size個字節的內存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C++規定,void* 類型可以強制轉換爲任何其它類型的指針。

二、定義

1.原型

extern void *malloc(unsigned int num_bytes);

2.頭文件

#include <stdlib.h>

3.功能

分配長度爲num_bytes字節的內存塊

4.返回值

如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定),否則返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。函數返回的指針一定要適當對齊,使其可以用於任何數據對象。

5.說明

關於該函數的原型,在以前malloc返回的是char型指針,新的ANSIC標準規定,該函數返回爲void型指針,因此必要時要進行類型轉換。

6.相關解釋

malloc的全稱是memory allocation,中文叫動態內存分配,當無法知道內存具體位置的時候,想要綁定真正的內存空間,就需要用到動態的分配內存。

二、函數聲明

1.全名

void *malloc(size_t size);

2.備註

void* 表示未確定類型的指針,void *可以指向任何類型的數據,更明確的說是指申請內存空間時還不知道用戶是用這段空間來存儲什麼類型的數據(比如是char還是int或者…)

三、與new的區別

在使用上,malloc 和 new 至少有兩個不同: new 返回指定類型的指針,並且可以自動計算所需要大小。比如:

int*p;
p=new int;
//返回類型爲int*類型(整數型指針),分配大小爲sizeof(int);

int*parr;
parr=new int[100];
//返回類型爲int*類型(整數型指針),分配大小爲sizeof(int)*100;

而 malloc 則必須要由我們計算字節數,並且在返回後強行轉換爲實際類型的指針。

int*p;
p=(int*)malloc(sizeof(int)*128);
//分配128個(可根據實際需要替換該數值)整型存儲單元,
//並將這128個連續的整型存儲單元的首地址存儲到指針變量p中
double*pd=(double*)malloc(sizeof(double)*12);
//分配12個double型存儲單元,
//並將首地址存儲到指針變量pd中

Free()


頭文件:malloc.h或stdlib.h
作用:釋放malloc(或calloc、realloc)函數給指針變量分配的內存空間的函數
使用後該指針變量一定要重新指向NULL,防止野指針出現,有效 規避誤操作。

new和new[]


一、new運算符

1.作用

給單個對象分配空間

2.語法

//new 數據類型
int q=new int;
int p=new(100);

二、new運算符特點

  1. 自動計算類型所佔空間大小
  2. 自動確定返回指針類型,不需要進行類型轉換
  3. 可以再分配內存的同時初始化無名對象
  4. 必須用delete來釋放空間

三、new[]

1.作用

給數組對象初始化

2.必須用delete[]來清空內存空間

int *q=new int[n];
delete []q;
發佈了92 篇原創文章 · 獲贊 137 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章