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

2016-02-19 19:59 6 1 收藏

下面这个新手入门:C++中堆内存(heap)的概念和操作方法教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - 编程语言 】

 
  
    堆内存是什么呢?
  
  我们知道在c/c++中定义的数组大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作中,我们有时候却需要动态的为数组分配大小, !-- frame contents -- !-- /frame contents -- 在这里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; //用于动态开辟数组的指针变量 
   
      cinarraysize; 
      array=(int*)malloc(arraysize * sizeof(int));//利用malloc在堆内存中开辟内存空间,它的大小是元素的个数乘以该数据类型的长度 
   
      for(int i=0;iarraysize;i++)  
      { 
          array[i]=i; 
      } 
   
      for(int i=0;iarraysize;i++) 
      { 
          coutarray[i]","; 
      } 
      coutendl; 
      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; 
   
      cinarraysize; 
       
      array=new int[arraysize];//开辟堆内存 
   
      for(int i=0;iarraysize;i++)  
      { 
          array[i]=i; 
      } 
   
      for(int i=0;iarraysize;i++) 
      { 
  
           coutarray[i]","; 
      } 
      coutendl; 
      delete[] array;//释放堆内存 
      cin.get(); 
      cin.get(); 
  }   更多内容请看C/C++技术学堂  C/C++技术专题  C/C++进阶技术文档专题,或

来源:https://www.tulaoshi.com/n/20160219/1622471.html

延伸阅读
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个dele...
摘要: 大家都知道变量的生存周期这个概念,可是有的时候变量生存周期已经结束,但是所分配的那块内存空间还是存在的。文章举了四个不同的例子,来说明这其中的原因。 前言: 前一段时间在一个好友的的博客论坛上看到他学习C++时碰到的一小点问题,是关于C++中最基本的内存分配方面的。其实对于内存这东西,除了知道我自己用的...
2345看图王新手入门操作指导 打开图片 利用2345看图王打开图片主要有三种方式: 1. 安装2345看图王软件后,在图库查看时双击图片直接打开; 2. 在图库查看图片时,右击利用下列选项中,选择看图王浏览图片; 3. 先启动2345看图王,利用的方式打开,支持快捷键Ctrl+O;也可以通过2345看图王中的的操作方式打开图片。 你还...
C++ 中重载 + 操作符的正确方法 作者:Danny Kalev 编译:MTT 工作室 原文出处:Overloading Operator + the Right Way 摘要: 本文概要性地介绍如何选择正确的策略来为用户定义类型重载 + 操作符。 用户...
前言: 在我们学习Java的过程中,把握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念。 Java概述: 目前Java主要应用于中间件的开发(middleware)---处理客户机于服...

经验教程

645

收藏

22
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部