C++动态内存的分配与释放(例:从堆内存中获取一个整型数组,赋值后打印出来)

本文介绍了C++中动态内存的分配与释放,包括使用new和delete运算符管理堆内存。通过示例展示了如何从堆内存中获取并初始化一个整型数组,以及如何释放分配的内存。强调了new与delete操作的注意事项,如必须匹配释放和避免重复释放。

题头的话:长按点赞可私我赠送50+本C与C++书籍电子书资源

C++动态内存的分配与释放

程序运行时可以使用的内存空间称为堆(heap)。堆内存就是在程序运行时获得的空间,在程序编译和连接时不必确定它的大小,它随着程序运行过程变化(故堆内存也称为动态内存)。
C++可以使用从C标准库中继承来的malloc() 和free()函数 (此时应用到头文件malloc.h ),h或者是使用new和delete运算符。

new运算符

运算符new用于分配堆内存:

指针变量=new 数据类型;

new从堆内存中为程序分配可以保存某种类型数据的一块内存空间,并返回该内存的首地址,该地址存放于指针变量中。

delete运算符

运算符delete用于释放new动态分配中的内存的首地址。

关于两者的注意事项

(1)用于new获取的内存空间,必须用delete进行释放。
(2)对于一个指针只能调用一次delete。
(3)用delete运算符作用的对象必须是用new分配的内存空间的首地址。

new与delete应用举例

#include<iostream>
using namespace std;
int main()
{
    int *p;
    p=new int;//分配内存空间
    *p= 5;
    cout<<*p;//释放内存空间
    delete p;
}

用new运算符建立数组类型的变量

其形式为:

指针变量-new 数据类型[数组大小];

此时指针变量指向第一个数组元素的地址。使用new分配数组时,不能提供初始值。用于new获取的数组变量内存空间,也必须用delete进行释放。
使用形式为:

delete 指针变量;   (释放变量)
delete []指针变量;   (释放数组变量)

同样,也可以用new来为多维数组分配空间,但是除了第一位可以为变量外,其他维数都必须是常量。

int(*p)[10];
int n;
···      //可由用户对变量n赋值
p=new int[n][10];
···
delete []p;
//在使用delete时,不用考虑数组的维数。

如果未能获得所需空间,new返回0,即空指针。(程序员可以籍此判断是否有足够空闲内存供以程序使用),例如:


int *p=new int[100];
if(p==0)
{
	cout<<"can't allocate more menory,terminating."<<endl;
	exit(1);//exit()函数的作用时终止程序运行。
}

从堆内存中获取一个整型数组,赋值后打印出来

#include<iostream>
using namespace std;
void main()
{
    int n;  //定义数组元素的个数
    int *p;
    cout<<"Please intput the length of the array: ";
    cin>>n;
    if((p=new int[n])==0)
    {
    cout<<"can't allocate more menory,terminating."<<endl;
	exit(1);
    }       //分配内存空间
    for(int i=0;i<n;i++) p[i]=i*2;
    cout<<"Now output the array:"<<endl;
    for(int i=0;i<n;i++) count<<p[i]<<" ";
    count<<endl;
    delete[]p;  //释放内存空间
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值