C++中堆內存(C++入門)

堆內存是什麼呢?

  我們知道在c/c++中定義的數組大小必需要事先定義好,他們通常是分配在靜態內存空間或者是在棧內存空間內的,但是在實際工作中,我們有時候卻需要動態的爲數組分配大小,在這裏c庫中的malloc.h頭文件中的malloc()函數就爲您解決了問題(bc或者是在老的標準中是alloc.h),它的函數原形是void* malloc(size_t size),在動態開闢的內存中,在使用完後我們要使用free()函數來釋放動態開闢的內存空間。

  下面我們來看一個完整的例子:

#include <iostream>  
#include <malloc.h>  
using namespace std;  
main()  
{  
    int arraysize; //元素個數  
    int *array; //用於動態開闢數組的指針變量  
    cin>>arraysize;  
    //利用malloc在堆內存中開闢內存空間,它的大小是元素的個數乘以該數據類型的長度  
    array=(int*)malloc(arraysize * sizeof(int));
    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釋放動態開闢的堆內存空間  
    cin.get();  
    cin.get();  
}

 

  這裏要特別注意個地方就是:
array=(int*)malloc(arraysize * sizeof(int));


  malloc()的函數原形本身是void* malloc(size_t size),由於動態分配的空間計算機並不知道是用來做什麼的所以是無類型的,但你要把它用在動態的整形數組上的時候就要顯式的轉換成int*了。
  下面我們再介紹c++所獨有的開闢和釋放堆內存空間的方法,new修飾符和delete修飾符。
  new和delete修飾符的操作並不需要頭文件的支持,這是c++所獨有的,new操作要比malloc更爲簡單,直接說明開闢的類型的數目就可以了,delete使用的時候如果是數組那麼必須使用delete[]。

#include <iostream>  
using namespace std;  
main()  
{  
    int arraysize; //元素個數  
    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();  
}  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章