這期內容當中小編將會給大家帶來有關malloc和new及realloc函數分別是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1、malloc函數
void *malloc(size_t size);
說明:malloc 向系統申請分配指定size個字節的內存空間。返回類型是 void* 類型。
2、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中
除了分配及最后釋放的方法不一樣以外,通過malloc或new得到指針,在其它操作上保持一致。
3、C語言函數realloc
原型:extern void *realloc(void *mem_address, unsigned int newsize);
語法:指針名=(數據類型*)realloc(要改變內存大小的指針名,新的大?。?。//新的大小一定要大于原來的大小不然的話會導致數據丟失!
頭文件:#include <stdlib.h> 有些編譯器需要#include <alloc.h>,在TC2.0中可以使用alloc.h頭文件
功能:先按照newsize指定的大小分配空間,將原有數據從頭到尾拷貝到新分配的內存區域,而后釋放原來mem_address所指內存區域,同時返回新分配的內存區域的首地址。即重新分配存儲器塊的地址。
返回值:如果重新分配成功則返回指向被分配內存的指針,否則返回空指針NULL?!?
注意:這里原始內存中的數據還是保持不變的。當內存不再使用時,應使用free()函數將內存塊釋放。
上述就是小編為大家分享的malloc和new及realloc函數分別是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。