网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.编程修养-C语言篇.
.高质量C++/C编程指南 --&nb.
.C程序开发经典实例之6.
.C语言程序开发经典实例之八.
.C语言嵌入式系统编程之屏幕操作.
.C语言初学者入门讲座 第十二讲 结.
.使用Microsoft Agent的COM接.
.Unix下用C编写类Windows菜单.
.迷宫探路II.
.VC++实现Win2000下直接读写磁盘扇.
.C++ Builder 初学问与答(十二).
.CRC-16/CRC-32 程序代码.
.秘籍:C语言高效编程的四大绝招.
.C/C++中的整型常识.
.C++中禁止异常信息传递到析构函数.
.C++程序设计从零开始之表达式.
.C语言库函数(T类字母).
.水滴石穿C语言之static辨析.
.初学者的福音:游戏开发新手入门.
.C++中用vectors改进内存的再分配.

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

发表日期:2008-3-8


 

  堆内存是什么呢?

  我们知道在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/C++技术学堂  C/C++技术专题  C/C++进阶技术文档专题,或
上一篇:C/C++中命令行参数的原理 人气:540
下一篇:C/C++中字符串常量的不相等性及字符串的Copy 人气:566
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐