动态申请和释放内存

1.一维数组内存的动态分配和释放如下:

int *array=new int [10];   //动态分配(例如分配10个单元的) 
memset(array,0,sizeof(array));     //初始化  (也可以利用一个for循环对其赋值初始化)
delete [] array;           //撤销

2.二维数组m行n列)利用new来进行动态分配实际上相当于对m个n元数组进行动态分配,只不过我们不能一味的按照动态分配一维数组的方法来这项操作。

具体做法如下:

int **array;
array=new int *[10];
for(int i=0;i<10;i++)
{
	array[i]=new int [5];
}

   上面的操作完成了一个10行5列的二维数组array[10][5]的动态分配,可以看到我们先动态分配了一个10单元的数组的指针的指针的首地址给array,然后再对其每个首地址进行遍历,同时完成一个5单元的数组的动态分分配,并把首地址给array[i],从而最终完成了二维数组array[10][5]的动态分配。

3.二维数组的初始化

   MSDN对memset的描述如下:

memset

Sets buffers to a specified character.

void *memset( void *dest, int c, size_t count );

可见memset只能作用于一个一维数组void *dest,因此最好的办法就是和二维数组的动态分配结合起来,new一个,memset一个。具体写法如下:

int **array;
array=new int *[10];
for(int i=0;i<10;i++)
{
	array[i]=new int [5];
	memset(array[i],0,5*sizeof(int));
}

 

4.二维数组内存的释放

 

for (int i = 0; i < 10; i++)
{
	delete[5]array[i];
}
delete[]array;

 

5.完整的例子

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;


6.一些错误的例子

int (*p)[4] = new int[3][4];    //错误!
int *p = new int[4][2];         //错误!

int x = 3, y = 4;
int (*p)[y] = new int[x][y];
//错误,y必须是const。所以这种方式不能达到真正的动态分配二维数组的目的,只能相当于半自动化的一个分配方式。


 


 

 


 

 



 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值