二维数组的分配和删除

来源:互联网 发布:录制屏幕的软件 编辑:程序博客网 时间:2024/05/16 15:45

二维数组的动态分配和删除

  首先,动态支持数组的分配,必须用   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);//释放内存简单方便.   

0 0
原创粉丝点击