动态存储分配

作者在 2008-07-09 22:58:23 发布以下内容
动态存储分配
 
  关于动态存储分配,这里有一道很好的题目:
 
 
  这道题实现了对一维数组的大小的改变。然后,还有一道改变二维数组大小的题目:
 
题目:
试编写一个函数ChangeSize2D 来改变一个二维数组的大小。上机测试该函数。
 
程序:
#include <iostream>
using namespace std;
template<class T>
void ChangeSize2D(T** &a,int rows,int cols,int ToRows,int ToCols)
{
 if(rows==ToRows&&cols==ToCols) return;
 
 T** b;
 b=new T*[ToRows];
 for(int i=0;i<ToRows;i++)
 {
  b[i]=new T[ToCols];
 }
 int m,n;
 if(rows<ToRows)
 {
  m=rows;
 }
 else
 {
  m=ToRows;
 }
 if(cols<ToCols)
 {
  n=cols;
 }
 else
 {
  n=ToCols;
 }
 for(int x=0;x<m;x++)
 {
  for(int y=0;y<n;y++)
  {
   b[x][y]=a[x][y];
  }
 }
 for(int j=0;j<rows;j++)
 {
  delete [] a[j];
 }
 delete [] a;
 a=b;
}
int main()
{
 //2*3
 int** a;
 a=new int*[2];
 a[0]=new int[3];
 a[1]=new int[3];
 a[0][0]=100;
 a[0][1]=101;
 a[0][2]=102;
 a[1][0]=110;
 a[1][1]=111;
 a[1][2]=112;
 try
 {
  ChangeSize2D(a,2,3,2,2);
 }
 catch(const char* s)
 {
  cout<<s<<endl;
  return 1;
 }
 cout<<"a[1][2]="<<a[1][2]<<endl;
 cout<<"a[1][1]="<<a[1][1]<<endl<<endl;
 return 0;
}
 
结果:
a[1][2]=-33686019
a[1][1]=111
Press any key to continue
 
  值得注意的是,使用指针来动态创建数组时,数组的大小用户要记好(因为DEBUG时,不会检查到越界的问题)。只有new出来的空间,才能用delete回收。
日志 | 阅读 933 次
文章评论,共0条
游客请输入验证码
浏览8476次