当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

二维动态数组分配内存方式

发表于: 2011-12-20   作者:Vincent_Hu   来源:转载   浏览次数:
摘要: 对于二维数组的动态分配与释放 首先,动态支持数组的分配,必须用   new   来进行创建一段堆内存,其它的存贮区域不允许动态分配的产生。 其次,C++并没有提供真正的动态多维数组语法,想动态分配数组,必须通过一维动态数组组合形成一个类似多维数组的存贮形式,并不像静态分配多维数组,它们的用法虽说有些地方有相似之处,但不完全相同。 再次,有些
对于二维数组的动态分配与释放

首先,动态支持数组的分配,必须用   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];   这样的错误写法。

二维动态数组分配内存方式

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在我以前的文章中都有讲过关于数组指针及指针数组的相关问题,但是讲得不够深入,我后来后了别人写的
1.数组的内存分配图 (1).基本数据类型一维数组内存分配 (2).对象数组的内存分配 2.数组的相关操作 (
当我们定义一个二维指针时,如果需要存储相应的数据,就需要我们动态的分配内存,这时,有一点是需
1、 int **p;表示指向指针的指针。 这个很容易理解,就是两次动态生成一维数组的过程。 int *p=new
在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相
/* 格式3: 基本格式: 数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...
思路 主要是把计算的函数由一次跑完全部改成一次一步 主要是把一个3重for循环改为能一步一次的实现
C++建立动态二维数组主要有两种方法: 1.使用数组指针,分配一个指针数组,将其首地址保存在b中,然
可能Java 数组大家都很熟悉,最近我遇到了一个关于Java 数组内存分配的问题。 呵呵。突然就发现许多
1,使用%x 来输出变量的地址 View Code 1 int i,j,k; 2 char ch,ch1; 3 float f1,f2; 4 5 printf( "
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号