用new创建多维数组时,最后需要用delete,但是我在delete时遇到了麻烦,实在不能再浪费时间了,先mark一下,至少创建多维数组这段是对的

以int型数组为例,我们知道

一维数组  int a[4] ={1,2,3,4};

二维数组  int b[3][4] = {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4}

三维数组  int c[2][3][4] = {1,2};

那么用new方式如何创建呢

一维数组有

int *p1 = new int[4];

二维数组有

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

三维数组

int (*p3)[3][4] = new int[2][3][4];//两维三行四列

同样的四位数组

int (*p4)[2][3][4] = new int[1][2][3][4];//不知道怎么叫了

忘了从哪里看到的说: 从二维数组开始,定义并不是写成  int *p2[4]、int * p3[3][4]、...这是因为int * p2[4]表示定义一个数组p2,该数组是int *型,数组内的每个元素都是指向int型的指针。

 //step 1定义多维数组//int *q1 = new int[4];  //创建一维数组,暂时不用//int (*q2)[4] = new int[0][4];//创建二位数组,暂时不用int (*p)[3][4] =  new int[2][3][4];//创建三维数组,本文研究的重点,我为了少打字,这个变量我定义成了p,并不是p3//int (*p4)[3][4][5] = new int [0][3][4][5];//创建四维数组//留个标记,用于//存放这些数组的指针,用于验证是否delete时会用到int *backup[24];int imark = 0;//循环将三维数组每个元素均赋值为1printf("------初始化得到的二维数组----\n");for(int i = 0;i< 2;i++){for(int j = 0;j<3;j++){for(int k = 0;k<4;k++){printf("%d --->",(*(*(p+i)+j)+k));//初始化之前均为0printf("%d ",*(*(*(p+i)+j)+k));//这里打印了new出来的三维数组,本层循环最后将每个值赋值成了1backup[imark++] = (*(*(p+i)+j)+k);*(*(*(p+i)+j)+k) = 1;//这里将每个元素赋值成了1,为的是方便后面delete时对比查看}printf("\n");}}printf("---------------------\n");////step 2 准备检验//前辈说书中讲的,数组的大小在之前的四个字节内存储着,究竟是啥呢,在这里可以打印查看printf("front 4 byte is %d, -->%d\n",&p[0][0][0]-1,(int)*(&p[0][0][0]-1));printf("p[0][0][0] address is %d\n",&p[0][0][0]);printf("p[1][2][3] address is %d\n",&p[1][2][3]);printf("\n");//这里尝试了好多种delete的方式都没有成功???╮(╯▽╰)╭//第一种尝试,直接删除p数组,这个似乎从原理上很容易否定/*delete []p;//这种方式发现只删除了new出来的前两个元素*///第二种尝试,借用一下保存的指针,用指针一个一个去free/*for(int i =0;i<24;i++){delete backup[i];//用backup中记忆的位置一个一个删除,发现行不通,&backup[i]也行不通//delete []backup;//这种也是行不通的,我注解上了,可以试试}*///第三种尝试,嵌套进入生成的数组,一层一层的去free,然而依然失败,不知道是重复删除了,还是怎么了,感觉是重复删除了for(int i = 0;i<2;i++){for(int j = 0;j<3;j++){delete [] p[i][j];}delete []p[i];}//第四种尝试,一个一个删,但依然没有成功,我从大到小,先小到大均试了一次,依然失败,下面写的是从大到小/*delete p[1][2][3];//不要搞混乱,2*3*4维数组最大值就是这个delete p[1][2][3];//不列写了,因为占篇幅,可以肯定的是没成功//...delete p[0][0][0];*///这里面检查是否已经delete了for (int i = 0; i < 24; i++) {if ((i != 0) && (i % 4 == 0)){printf("\n");}printf("[%d]%d--->%d ", i, backup[i], (int) *backup[i]);}printf("\n");return 0;

我目前gdb方式还不会看,另外delete还学得不够深入,再钻进去周末别的也就看不成了,所以得先记下。

另外粘一个别人new三维数组的方法

int*** a= new int**[5];
for (int i = 0; i < 5; ++i)
{a[i] = new int*[6];for (int j = 0; j < 6; ++j){a[i][j] = new int[7];}
}
for (int i = 0; i < 5; ++i)
{for (int j = 0; j < 6; ++j){delete[] a[i][j];}delete[] a[i];
}
delete[] a;

就先到这里吧

new创建 一维数组、二维数组、三维数组、四维数组...相关推荐

  1. linux c语言 malloc动态分配指针,C语言malloc函数为一维,二维,三维数组分配空间...

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  2. c语言malloc申请三维数组,C语言malloc函数为一维,二维,三维数组分配空间

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  3. C语言malloc函数为一维,二维,三维数组分配空间

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  4. 【EasyExcel】Java读取一维及二维Excel数据并存入数组

    EasyExcel是一个基于Java的.快速.简洁.解决大文件内存溢出的Excel处理工具.它能让你在不用考虑性能.内存的等因素的情况下,快速完成Excel的读.写等功能. Java基于EasyExc ...

  5. python二维、三维、思维数组之间的转化

    python二维.三维.思维数组之间的转化 import numpy as np# 假设你有一个二维数组,形状为(32,10000) gray = np.random.randint(0, 256, ...

  6. MATLAB一维、二维、三维 标量函数绘图

    MATLAB一维.二维.三维 标量函数绘图 1. 一维标量绘图plot 2. 二维.三维标量绘图 2.1. mesh函数标量绘图 2.2. surf函数标量绘图 2.3. contour(x,y,z) ...

  7. C++数组(一维、二维、三维)的动态分配new、初始化memset和释放delete

    [原文]http://blog.csdn.net/shanzhizi/article/details/7835752 数组的动态分配.初始化和释放经常用到,这里总结一下,尤其是二维数组 一维数组 一维 ...

  8. MATLAB中怎样初始化(创建)二维、三维、四维以及多维矩阵,各维度的索引顺序是怎样的?

    目录 1 在MATLAB中初始化二维矩阵 2 在MATLAB中初始化三维矩阵 3 在MATLAB中初始化四维矩阵 4 在MATLAB中初始化N维矩阵 1 在MATLAB中初始化二维矩阵 在MATLAB ...

  9. 神经网络之多维卷积的那些事(一维、二维、三维)

    文章目录 前言 一维卷积Conv1d 二维卷积Conv2d 三维卷积Conv3d 卷积中的特征图大小计算方式 总结 前言 一般来说,一维卷积用于文本数据,二维卷积用于图像数据,对宽度和高度都进行卷积, ...

  10. matlab四维图形,MATLAB二维、三维、四维绘图

    二维图形绘制直角坐标极坐标统计图面域图填色图羽毛图.射线图Voronoi图彩带图二维半图三维图形绘制线状图数组图网格图面状图统计图瀑布图散点图函数图四维图形绘制切片图颜色权重图Reference 二维 ...

最新文章

  1. 启明云端分享| IDO-SOM2D01-V1-2GW核心板SPI调试总结
  2. boost::gregorian模块实现测试时钟的测试程序
  3. QT的QGLWidget类的使用
  4. 04_NoSQL数据库之Redis数据库:set类型和zset类型
  5. 欧几里德投影(Euclidean projection)
  6. Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现 - aspirant - 博客园
  7. Tomcat配置及原理文章
  8. github怎么隐藏自己的pr记录_记便签的软件哪个好?怎么及时记录自己的想法
  9. 2019-ACM-ICPC-南京区网络赛-E. K Sum(莫比乌斯反演 + 杜教筛)
  10. CF980D Perfect Groups
  11. Postman常用方法
  12. asterisk远程注册
  13. vim插件command-t安装
  14. kubernetes-[1]-简单介绍
  15. Windows10系统删除文件夹“找不到该项目”强删方法
  16. FlashFXP、LeapFTP、CuteFTP 等FTP软件二进制上传或下载方法
  17. C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字
  18. Cox回归和HR值理解要点难点,实例讲解
  19. python自动化操作电脑的简单实现
  20. 一张图分出你是用左脑还是右脑 z

热门文章

  1. 微生物测序应该用16S 还是宏基因组?
  2. Cadence网表导入PADS9.5
  3. python自动化刷视频赚钱-自动化测试:如何自动化的刷快手极速版的视频
  4. 已知两个完全平方三位数abc 和xyz,其中a、 b、 c、 x、 y、 z 未必是不同的,而ax、 by、 cz 是三个完全平方数。求abc 和 xyz。
  5. 谷歌浏览器的源码分析 13
  6. u盘文件删除如何恢复?四步解决
  7. python博客、视频、编辑器、App资源汇总
  8. 【笔记】Failed to compile. Failed to minify the bundle. Error: 48.ccc9faca.async.js from UglifyJs Unexp
  9. SQL Server索引语法
  10. 志高扫地机器人好用吗_志高ZGS878这个扫地机器人如何?抽到一张抵用卷只要380元,怕是坑,求问!?...