介紹C++中堆內(nèi)存的概念和操作方法
堆內(nèi)存(heap)是什么呢?
我們知道在c/c++中定義的數(shù)組大小必需要事先定義好,他們通常是分配在靜態(tài)內(nèi)存空間或者是在棧內(nèi)存空間內(nèi)的,但是在實(shí)際工作中,我們有時候卻需要動態(tài)的為數(shù)組分配大小,在這里c庫中的malloc.h頭文件中的malloc()函數(shù)就為您解決了問題,(bc或者是在老的標(biāo)準(zhǔn)中是alloc.h),它的函數(shù)原形是void* malloc(size_t size),在動態(tài)開辟的內(nèi)存中,在使用完后我們要使用free()函數(shù)來釋放動態(tài)開辟的內(nèi)存空間!
下面我們來看一個完整的例子!
C++ 代碼:
- //程序作者:管寧
- //所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必注明出處和作者
- #include<iostream>
- #include<malloc.h>
- usingnamespacestd;
- main()
- {
- intarraysize;//元素個數(shù)
- int*array;//用于動態(tài)開辟數(shù)組的指針變量
- cin>>arraysize;
- array=(int*)malloc(arraysize*sizeof(int));
- //利用malloc在堆內(nèi)存中開辟內(nèi)存空間,它的大小是元素的個數(shù)乘以該數(shù)據(jù)類型的長度
- for(inti=0;i<arraysize;i++)
- {
- array[i]=i;
- }
- for(inti=0;i<arraysize;i++)
- {
- cout<<array[i]<<",";
- }
- cout<<endl;
- free(array);//利用free釋放動態(tài)開辟的堆內(nèi)存空間
- cin.get();
- cin.get();
- }
這里要特別注意個地方就是:
C++ 代碼:
- array=(int*)malloc(arraysize*sizeof(int));
malloc()的函數(shù)原形本身是void* malloc(size_t size),由于動態(tài)分配的空間計算機(jī)并不知道是用來做什么的所以是無類型的,但你要把它用在動態(tài)的整形數(shù)組上的時候就要顯式的轉(zhuǎn)換成int*了!