网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> VC编程 >> 文章正文
  新手入门:C++中堆内存(heap)的概念和操作方法            【字体:
新手入门:C++中堆内存(heap)的概念和操作方法
作者:佚名    文章来源:不详    点击数:    更新时间:2007-7-31    
 

  堆内存是什么呢?

  我们知道在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(); 
}  

站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     directx 图形接口指南(…
     win2k下的api函数的拦截
     用crypto  api  实现公钥…
     根据别人的md5源码封装的…
     vc中使用gdi+合并jpg图片
     document/view的交互 --…
     windows下的函数hook技术
     windows api函数大全一
     用vc 6.0实现串行通信的…
     vc++技术内幕(第四版)…
  • Ant入门-配置和使用     选…

  • JSP标准模板库(JSTL)入门教…

  • genexus中对字符串的格式补空…

  • struts异常_does not start …

  • 关于Linux下C/C++程序编译

  • c++ 09 :一览未来

  • visual C++ 6.0开发工具与调…

  • 看完了第二遍C++Primer,学习…

  • C++的未来,以及未来的未来

  • Visual C++编程命名规则

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David