堆內(nèi)存是什么呢?
我們知道在c/c++中定義的數(shù)組大小必需要事先定義好,他們通常是分配在靜態(tài)內(nèi)存空間或者是在棧內(nèi)存空間內(nèi)的,但是在實(shí)際工作中,我們有時(shí)候卻需要?jiǎng)討B(tài)的為數(shù)組分配大小,在這里c庫(kù)中的malloc.h頭文件中的malloc()函數(shù)就為您解決了問題,(bc或者是在老的標(biāo)準(zhǔn)中是alloc.h),它的函數(shù)原形是void* malloc(size_t size),在動(dòng)態(tài)開辟的內(nèi)存中,在使用完后我們要使用free()函數(shù)來(lái)釋放動(dòng)態(tài)開辟的內(nèi)存空間!
下面我們來(lái)看一個(gè)完整的例子!
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必出處和作者
#include
#include
using namespace std;
main()
{
int arraysize; //元素個(gè)數(shù)
int *array; //用于動(dòng)態(tài)開辟數(shù)組的指針變量
cin>>arraysize;
array=(int*)malloc(arraysize * sizeof(int));//利用malloc在堆內(nèi)存中開辟內(nèi)存空間,它的大小是元素的個(gè)數(shù)乘以該數(shù)據(jù)類型的長(zhǎng)度
for(int i=0;i{
array[i]=i;
}
for(int i=0;i{
cout<}
cout< free(array);//利用free釋放動(dòng)態(tài)開辟的堆內(nèi)存空間
cin.get();
cin.get();
}
這里要特別注意個(gè)地方就是:
array=(int*)malloc(arraysize * sizeof(int));
malloc()的函數(shù)原形本身是void* malloc(size_t size),由于動(dòng)態(tài)分配的空間計(jì)算機(jī)并不知道是用來(lái)做什么的所以是無(wú)類型的,但你要把它用在動(dòng)態(tài)的整形數(shù)組上的時(shí)候就要顯式的轉(zhuǎn)換成int*了!
下面我們?cè)俳榻Bc++所獨(dú)有的開辟和釋放堆內(nèi)存空間的方法,new修飾符和delete修飾符.
new和delete修飾符的操作并不需要頭文件的支持,這是c++所獨(dú)有的,new操作要比malloc更為簡(jiǎn)單,直接說(shuō)明開辟的類型的數(shù)目就可以了,delete使用的時(shí)候如果是數(shù)組那么必須使用delete[].
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必出處和作者
#include
using namespace std;
main()
{
int arraysize; //元素個(gè)數(shù)
int *array;
cin>>arraysize;
array=new int[arraysize];//開辟堆內(nèi)存
for(int i=0;i{
array[i]=i;
}
for(int i=0;i{
cout<}
cout< delete[] array;//釋放堆內(nèi)存
cin.get();
cin.get();
}
我們知道在c/c++中定義的數(shù)組大小必需要事先定義好,他們通常是分配在靜態(tài)內(nèi)存空間或者是在棧內(nèi)存空間內(nèi)的,但是在實(shí)際工作中,我們有時(shí)候卻需要?jiǎng)討B(tài)的為數(shù)組分配大小,在這里c庫(kù)中的malloc.h頭文件中的malloc()函數(shù)就為您解決了問題,(bc或者是在老的標(biāo)準(zhǔn)中是alloc.h),它的函數(shù)原形是void* malloc(size_t size),在動(dòng)態(tài)開辟的內(nèi)存中,在使用完后我們要使用free()函數(shù)來(lái)釋放動(dòng)態(tài)開辟的內(nèi)存空間!
下面我們來(lái)看一個(gè)完整的例子!
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必出處和作者
#include
#include
using namespace std;
main()
{
int arraysize; //元素個(gè)數(shù)
int *array; //用于動(dòng)態(tài)開辟數(shù)組的指針變量
cin>>arraysize;
array=(int*)malloc(arraysize * sizeof(int));//利用malloc在堆內(nèi)存中開辟內(nèi)存空間,它的大小是元素的個(gè)數(shù)乘以該數(shù)據(jù)類型的長(zhǎng)度
for(int i=0;i{
array[i]=i;
}
for(int i=0;i{
cout<}
cout<
cin.get();
cin.get();
}
這里要特別注意個(gè)地方就是:
array=(int*)malloc(arraysize * sizeof(int));
malloc()的函數(shù)原形本身是void* malloc(size_t size),由于動(dòng)態(tài)分配的空間計(jì)算機(jī)并不知道是用來(lái)做什么的所以是無(wú)類型的,但你要把它用在動(dòng)態(tài)的整形數(shù)組上的時(shí)候就要顯式的轉(zhuǎn)換成int*了!
下面我們?cè)俳榻Bc++所獨(dú)有的開辟和釋放堆內(nèi)存空間的方法,new修飾符和delete修飾符.
new和delete修飾符的操作并不需要頭文件的支持,這是c++所獨(dú)有的,new操作要比malloc更為簡(jiǎn)單,直接說(shuō)明開辟的類型的數(shù)目就可以了,delete使用的時(shí)候如果是數(shù)組那么必須使用delete[].
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必出處和作者
#include
using namespace std;
main()
{
int arraysize; //元素個(gè)數(shù)
int *array;
cin>>arraysize;
array=new int[arraysize];//開辟堆內(nèi)存
for(int i=0;i{
array[i]=i;
}
for(int i=0;i{
cout<}
cout<
cin.get();
cin.get();
}