爱乐眼底图像分析

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6691|回复: 2

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

[复制链接]
发表于 2012-8-26 19:58:31 | 显示全部楼层 |阅读模式
今天在群里遇到一个询问二维数组动态申请的问题,自己想了一种办法,又在网上搜了一下,觉得下面这篇文章写得不错,特转帖如下:
两种方法:
1。先定义一个一维数组的类型,然后再用该类型定义一个一维数组(实际上已经成为二维的)
      相当于递归定义
           
           typedef int array[COL];       //使用typedef定义一个具有COL个元素的数组类型
           array *a;  //定义二维数组,与一维数组相同
           a=new array[row]; //为该一维数组(实际上二维)申请空间
                    
      该方法定义的动态二维数组的释放只需以下语句即可:
           delete[] a;
           a=NULL;
                 
                  





回复

使用道具 举报

 楼主| 发表于 2012-8-26 19:58:50 | 显示全部楼层

2。 使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组
              
           int **b=new int*[row];       //分配一个指针数组,将其首地址保存在b中                                                     
           for(i=0;i<row;i++)             //为指针数组的每个元素分配一个数组
               b=new int[col];
           
        该方法定义的动态二维数组的释放需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:
           for(i=0;i<row;i++)
           {
                 delete [col]b;
                 b=NULL;
           }
           delete [row]b;
           b=NULL;
                                       



回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-26 19:59:00 | 显示全部楼层

3. int *mat = new int[m * n];

     这种方法的优点是内存连续,存续速度快。并且释放时也很简单直接delete[] mat;即可。

  • #include <iostream>  
  • using namespace std;  
  •   
  • void main(void)  
  • {  
  •     int n = 3;  
  •   
  •     // 方法2  
  •     int **mat = new int*[n];  
  •     for (int i = 0; i < 3; i++)  
  •     {  
  •         mat = new int[n];  
  •     }  
  •     // int *mat = new int[n * n]; // 方法3  
  •   
  •     // 赋值  
  •     for (int i = 0; i < 3; i++)  
  •     {  
  •         for (int k = 0; k < 3; k++)  
  •         {  
  •             mat[k] = i + k;    // 方法2  
  •             //mat[i + k] = i + k; // 方法3  
  •         }  
  •     }  
  •   
  •     // 输出  
  •     for (int i = 0; i < 3; i++)  
  •     {  
  •         for (int k = 0; k < 3; k++)  
  •         {  
  •             cout<<mat[k]<<" ";     // 方法2  
  •             // cout<<mat[i + k]<<" "; // 方法3  
  •         }  
  •         cout<<endl;  
  •     }  
  •   
  •     // 释放  
  •     // 方法2  
  •     for (int i = 0; i < 3; i++)  
  •     {  
  •         delete[] mat;  
  •         mat = NULL;  
  •     }  
  •   
  •     delete[] mat;  
  •     mat = NULL;  
  •   
  •     // 方法3,很简单  
  •     // delete[] mat;   
  •     system("pause");  
  • }  

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



QQ|Archiver|手机版|小黑屋|爱乐眼底图像分析 ( 京ICP备1201155号 )        

GMT+8, 2024-11-23 16:04 , Processed in 0.051068 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表