`
garman
  • 浏览: 28916 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

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

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jia_xiaoxin/archive/2008/11/10/3268645.aspx 

 

 

 

代码有些错误,更改如下:int **p = new int*[x];//创建一个动态int* 型数组for( i = 0; i < x; i) p[i] = new int[y]; //再创建一个动态int 型数组 for ( i = 0; i < x; i) { delete[] p[i]; p[i] = NULL; } delete []p; p = NULL;
分享到:
评论

相关推荐

    动态二维数组 c#编程

    在C#编程中,动态二维数组是一种非常重要...以上就是关于C#编程中动态二维数组的基本知识,希望对你理解和使用动态二维数组有所帮助。在实际编程中,应根据具体需求选择合适的数据结构,以实现最优的性能和代码可读性。

    CStringArray二维数组的定义和操作

    总结,`CStringArray`二维数组的定义和操作主要包括定义新类型、动态创建子数组并插入数据以及遍历和读取数据。在实际使用中,还需要考虑内存管理,确保在不再使用子数组时释放它们占用的内存。此外,对于更复杂的...

    动态二维数组的应用

    在编程领域,动态二维数组是一种灵活的数据结构,它允许我们根据程序运行时的需求来分配和管理内存。这种数据结构在处理不确定大小或需要变化大小的数据集时尤其有用。本篇文章将详细探讨动态二维数组的初始化、操作...

    Java二维数组实现简单Map

    1. **插入(Put)**:在二维数组中插入一个键值对意味着找到一个空位(假设数组已预先分配好大小),并将键值对放入对应的位置。如果键已经存在,可以选择更新其对应的值。 2. **查找(Get)**:根据键来查找对应的...

    CStringArray二维数组

    在深入探讨 `CStringArray` 与二维数组的应用之前,我们首先简要了解一下 `CStringArray` 和其在 C++ 中的基本概念。 #### 一、CStringArray 概述 `CStringArray` 是 MFC(Microsoft Foundation Classes)中的一个...

    动态开辟二维数组.doc )

    ### 动态开辟二维数组:深入理解与实践 在编程领域,特别是在C++中,动态开辟二维数组是一项基本而重要的技能。本文将基于提供的文件信息,深入探讨如何使用C++中的`new`关键字以及`vector`容器来实现这一功能。 #...

    JavaScript实现一维数组转化为二维数组

    首先,我们需要理解一维数组和二维数组的基本概念。一维数组是一个线性的数据结构,其中的元素按照顺序排列。例如,`[1, 2, 3, 4]`就是一个一维数组。而二维数组,又称为矩阵,是包含多个一维数组的数据结构,可以...

    二维数组的添加删除-易语言

    总结来说,二维数组在易语言中用于存储和处理多维度数据,其添加和删除元素的操作需要注意数组的静态特性和动态扩展的问题。在处理过程中,理解数组的底层工作原理和选择合适的数据结构对于编写高效、灵活的代码至关...

    C++二维动态数组的创建与删除

    在C语言中,动态创建二维数组的过程与C++类似,只是使用`malloc`函数替代`new`运算符。例如,创建一个`double`类型的二维数组可以这样做: ```c double **data; data = (double **)malloc(m * sizeof(double *)); ...

    Vector创建二维数组.zip

    总的来说,使用`std::vector`创建二维数组提供了灵活性和易用性,特别是在处理动态大小的二维数据时。然而,需要注意的是,频繁的内存重分配(如添加大量元素)可能会带来一定的性能开销。因此,在设计和实现时,应...

    Vector创建二维数组及代码实现.docx

    传统的二维数组可以通过指定固定的行数和列数来创建,但这种方式在需要动态改变数组大小时会显得不够灵活。为了克服这一限制,C++标准库中的`vector`容器提供了一种更为灵活的方式来创建和管理二维数组。 #### 1. ...

    用一维数组表现的顺序存储结构

    - 多维数组:一维数组可以扩展为二维数组(矩阵)或多维数组,用于处理更复杂的数据布局。 - 动态数组:C++中的`std::vector`和Java中的`ArrayList`提供动态数组功能,允许在运行时改变数组的大小。 总结来说,一...

    ccf.rar_ccf_二维数组

    在IT领域,尤其是在编程语言如C++中,动态内存分配是一项关键技能,特别是在处理数据结构如二维数组时。本文将深入探讨如何使用链表动态分配二维数组,以及递归下降语法分析器的相关知识。 首先,让我们关注核心...

    c++创建二维动态数组与内存释放问题

    C++ 创建二维动态数组是指在程序运行时动态地分配一个二维数组,以满足不同场景下的需求。然而,在使用二维动态数组时,内存释放问题也是需要特别注意的。 一、C++ 创建二维动态数组 在 C++ 中,创建二维动态数组...

    *****关于动态数组的创建****

    - **Python**:Python的列表本质上就是动态数组,可以随时添加或删除元素。 - **C#**:C#的List类也是动态数组的一种实现,具有类似的特性。 总的来说,动态数组是编程中不可或缺的数据结构,它的创建和操作是...

    C++创建动态数组

    首先,定义了一个指向指针的指针`int **arr`,这是因为二维数组本质上是一个指向一维数组的指针。然后,通过用户输入获取数组的行数`n`和列数`m`。 接下来,使用`new`运算符为每一行分配内存。`arr = new int*[n];`...

    信息学奥寒一本通:第5章 数组(C++版)

    4. **二维数组**:在信息学竞赛中,二维数组常用于表示矩阵或棋盘。定义二维数组的方式为`int grid[row][col]`,访问元素时使用两个索引,如`grid[i][j]`。 5. **数组与指针的关系**:在C++中,数组名实际上是一个...

    12道不错的数组例题

    - Java支持二维数组,可以看作是一组一维数组的集合。例如,`int[][] matrix = new int[3][4]`创建了一个3行4列的矩阵。 4. **数组排序**: - 可以使用Java内置的`Arrays.sort()`方法对数组进行升序或降序排序。...

    VB 动态数组实例

    这将创建一个4行4列的二维数组。 4. **使用动态数组**: 一旦动态数组被声明并初始化,就可以像使用普通数组一样操作它,进行赋值、读取等操作。例如: ```vb arr(0) = 1 arr(1) = 2 ``` 或者,对于二维数组...

Global site tag (gtag.js) - Google Analytics