堆內存是什么呢?
我們知道在c/c++中定義的數(shù)組大小必需要事先定義好,他們通常是分配在靜態(tài)內存空間或者是在棧內存空間內的,但是在實際工作中,我們有時候卻需要動態(tài)的為數(shù)組分配大小,在這里c庫中的malloc.h頭文件中的malloc()函數(shù)就為您解決了問題(bc或者是在老的標準中是alloc.h),它的函數(shù)原形是void* malloc(size_t size),在動態(tài)開辟的內存中,在使用完后我們要使用free()函數(shù)來釋放動態(tài)開辟的內存空間。
下面我們來看一個完整的例子: #include <iostream> #include <malloc.h> using namespace std; main() { int arraysize; //元素個數(shù) int *array; //用于動態(tài)開辟數(shù)組的指針變量 cin>>arraysize; array=(int*)malloc(arraysize * sizeof(int));//利用malloc在堆內存中開辟內存空間,它的大小是元素的個數(shù)乘以該數(shù)據(jù)類型的長度 for(int i=0;i<arraysize;i++) { array[i]=i; } for(int i=0;i<arraysize;i++) { cout<<array[i]<<","; } cout<<endl; free(array);//利用free釋放動態(tài)開辟的堆內存空間 cin.get(); cin.get(); } 這里要特別注意個地方就是: array=(int*)malloc(arraysize * sizeof(int)); malloc()的函數(shù)原形本身是void* malloc(size_t size),由于動態(tài)分配的空間計算機并不知道是用來做什么的所以是無類型的,但你要把它用在動態(tài)的整形數(shù)組上的時候就要顯式的轉換成int*了。 下面我們再介紹c++所獨有的開辟和釋放堆內存空間的方法,new修飾符和delete修飾符。 new和delete修飾符的操作并不需要頭文件的支持,這是c++所獨有的,new操作要比malloc更為簡單,直接說明開辟的類型的數(shù)目就可以了,delete使用的時候如果是數(shù)組那么必須使用delete[]。 #include <iostream> using namespace std; main() { int arraysize; //元素個數(shù) int *array; cin>>arraysize; array=new int[arraysize];//開辟堆內存 for(int i=0;i<arraysize;i++) { array[i]=i; } for(int i=0;i<arraysize;i++) { cout<<array[i]<<","; } cout<<endl; delete[] array;//釋放堆內存 cin.get(); cin.get(); }
|