二维数组 动态分配

一.C语言  ------malloc()   free()


以二维整型数组为例int Array[x][y]
1.内存不连续

遵循从外到里,逐层申请的原则:

最外层的指针就是数组名Array,他是一个二维指针,指向的是Array[],Array[]是一维指针,所以给Array申请内存空间需要一个二维指针int ** p;


int **Array;      //  二维指针 Array[x][y]

Array=(int **)malloc(x*sizeof(int *));    // 为Array指针分配一个指向X 个指向int 的指针

 for(i=0;i<x;i++)
         Array[i]=(int *)malloc(sizeof(int)*y);       // 分配每个指针的地址

/***********************释放*******从最外层开始**/

 for(i=0;i<x;i++)
{
free(Array[i]);
Array[i]==NULL;
}
 free(Array)

不连续内存,但是可用array[x][y]的方式访问。


2.一位数组代替二维数组

//int array[x][y];

int array*=(int *)malloc(sizeof(int)*x*y);   // 

优:连续内存

劣:不能用array[x][y]的方式访问



二.C++  new   delete

int x = 3, y = 4;   
int *p = new int*[x];//创建一个动态 int* 型数组   

 for(int i = 0; i < y; ++i)   
      p[i] = new int[x]; //再创建一个动态 int 型数组  

 for (int i = 0; i < y; ++i)   
 {   
     delete p[i];//由里至外,进行释放内存。   
      p[i] = NULL;//不要忘记,释放空间后p[i]不会自动指向NULL值,还将守在原处,只是释放内存而已,仅此而已。   
 }   
 delete []p;   
 p = NULL;   




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值