| 導購 | 订阅 | 在线投稿
分享
 
 
 

新手入門:C++中堆內存(heap)的概念和操作方法

來源:互聯網  2008-06-01 02:03:50  評論

堆內存是什麽呢?

我們知道在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;

array=(int*)malloc(arraysize * sizeof(int));//利用malloc在堆內存中開辟內存空間,它的大小是元素的個數乘以該數據類型的長度

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();

}

新手入門:C++中堆內存(heap)的概念和操作方法
更多內容請看C/C++技術學堂 C/C++技術專題 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; array=(int*)malloc(arraysize * sizeof(int));//利用malloc在堆內存中開辟內存空間,它的大小是元素的個數乘以該數據類型的長度 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(); } [url=/bbs/detail_1785278.html][img]http://image.wangchao.net.cn/it/1323424037974.gif[/img][/url] 更多內容請看C/C++技術學堂 C/C++技術專題 C/C++進階技術文檔專題,或
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有