动态存储分配问题 在C++编程中

操作符 new

C++ 操作符 new 可以用来动态存储分配,该操作符返回 一个指向所分配空间的指针。 例如, 给一个整数分配存储空间,可以使用下面的语句。

int *y;

当需要使用该整数时,可以使用如下语法来分配存储空间:

y = new int;

操作符new 分配了一块能存储一个整数的空间, 并将指向该空间的指针返回给y, y 是对整数指针的引用,而*y则是对整数本身的引用。为了在刚分配的空间中存储一个整数值, 比如 20,可以使用如下语法:

*y =20;

三步以整合,可以写作:

int *y =  new int(20);

一维数组:

为了在运行时创建一个一维浮点数组x, 首先必须把x说明成一个指向float的指针,然后为数组分配足够的空间。例如, 一个大小为n的一维浮点数组可以按如下方式来创建:

float *x=new float [n];

操作符new分配n个浮点数所需要的空间,并返回指向第一个浮点数的指针。可以使用如下语法来访问每个数组元素:x[0],x[1],x[n-1] 等。

异常处理

在执行语句

float *x = new float [n];

时,计算机有时会出现不能分配足够的空间,这是会报异常 (exception). 可以采用try-catch 结构来捕获 new 引发的异常:

# include<except.h>

# include<stdlib.h>

float *x

try{x = new float [n];}

catch(xalloc){cerr<<"out of memorry"<<endl;

                     exit(1);}

操作符 delete

动态分配的存储空间不再需要时应该被释放,所释放的空间可重新用来动态的创建新的结构。下面的语句是用来释放分配给*y的空间以及一维数组x:

delete y;

delete []x;

二维数组

C++中的二维数组的动态分配问题是一个‘不太容易的事情‘。二维数组的存储结构是下图这个样子。

先写代码吧,随后补图,哈哈哈!

template<class T>
bool Make2DArray(T **&x, int rows, int cols)
{
  try{
    //创建行指针
    x = new T *[rows];
    // 为每一行分配空间
    for(int i=0;i<rows,i++)
            x[i]=new int[cols];
       
    return true;}
  catch(xalloc){return false;}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值