继续我的c++语法,,,二维数组的动态创建和释放

从csdn的帖子上看过来的。

from:http://topic.csdn.net/t/20040629/21/3132646.html


总结:

                                                对于二维数组的动态分配与释放

首先,动态支持数组的分配,必须用   new   来进行创建一段堆内存,其它的存贮区域不允许动态分配的产生。


其次,C++并没有提供真正的动态多维数组语法,想动态分配数组,必须通过一维动态数组组合形成一个类似多维数组的存贮形式,并不像静态分配多维数组,它们的用法虽说有些地方有相似之处,但不完全相同。


再次,有些网友有一些很BT的分配方式。


例如:


int   (*p)[4]   =   new   int[3][4];


解释:可能有些初学者认为这样是可取的,也是利用   new   分配的数组,就可以是动态的,那你的想法就错了,它的分配必须得有最外层   const   的支持—


int   x   =   3,   y   =   4;

int   (*p)[y]   =   new   int[x][y];//error,y必须是const。

所以这种方式不能达到真正的动态分配二维数组的目的,只能相当于半自动化的一个分配方式。


那么如果依靠下面的这种方式是正确的:


例:


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;

它就是依靠一维数组的组合来完成,这样创建的动态数组就是一个全自动的个分配方式。


例(完美废人提供):


void   *   buf   =   malloc   (x   *   y   *   sizeof   (int)   );   //这也是一个好方法,简单方便,但它是C里面的分配方式。


free(buf);//释放内存简单方便.



提示:千万不要有   int   *p   =   new   int[4][2];   这样的错误写法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值