使用二维数组的时候,有时候事先并不知道数组的大小,因此就需要动态的申请内存。常见的申请内存的方法有两种:malloc/free 和 new/delete。

一、malloc/free

(1)申请一维数组

  1. void dynamicCreate1Array()
  2. {
  3. int m;
  4. int i;
  5. int *p;
  6.  
  7. cout<<("please input the length of data:");
  8. cin >> m;
  9.  
  10. p = (int*)malloc(sizeof(int)*m);//动态开辟
  11.  
  12. cout << "please input data" << endl;
  13. for (i = ; i < m; i++)
  14. cin >> p[i];
  15.  
  16. cout << "data is :";
  17. for (i = ; i < m; i++)
  18. cout << p[i] << endl;
  19. free(p);
  20. }

(2)申请二维数组

  1. void dynamicCreate2Array()
  2. {
  3. int m, n;
  4. int i, j;
  5. int **p;
  6.  
  7. printf("please input the row and col:");
  8. cin >> m >> n;
  9. //scanf("%d%d", &m, &n);
  10.  
  11. p = (int**)malloc(sizeof(int*)*m); //开辟行
  12.  
  13. for (i = ; i < m; i++)
  14. {
  15. *(p + i) = (int*)malloc(sizeof(int)*n);//开辟列
  16. }
  17. //输入数据
  18. printf("please input data:");
  19. for (i = ; i < m; i++)
  20. for (j = ; j < n; j++)
  21. cin >> p[i][j];
  22. //输出数据
  23. for (i = ; i < m; i++)
  24. {
  25. for (j = ; j < n; j++)
  26. {
  27. cout << p[i][j];
  28. }
  29. cout << endl;
  30. }
  31. //释放开辟的二维空间
  32. for (i = ; i < m; i++)
  33. free(*(p + i));
  34. }

二、new/delete

(1)申请一维数组

  1. void DynamicCreate1Array()
  2. {
  3. int len;
  4. int i;
  5.  
  6. cout << "please input the length of data: ";
  7. cin >> len;
  8.  
  9. int *p = new int[len];
  10.  
  11. cout << "please input data: ";
  12. for (int i = ; i < len; i++)
  13. cin >> p[i];
  14.  
  15. cout << "data is " << endl;
  16. for (i = ; i < len; i++)
  17. cout <<p[i] << endl;
  18.  
  19. delete[] p;
  20. }

(2)申请二维数组

  1. void DynamicCreate2Array()
  2. {
  3. int m, n;
  4. int i;
  5. cout << "input row and col: ";
  6. cin >> m >> n;
  7.  
  8. //动态开辟空间
  9. int **p = new int*[m]; //开辟行
  10. for (int i = ; i < m; i++)
  11. p[i] = new int[n]; //开辟列
  12.  
  13. cout << "input data: ";
  14. for (i = ; i < m; i++)
  15. for (int j = ; j < n; j++)
  16. cin >> p[i][j];
  17.  
  18. cout << "output: " << endl;
  19. for (i = ; i < m; i++)
  20. {
  21. for (int j = ; j < n; j++)
  22. cout << p[i][j]<<" ";
  23. cout << endl;
  24. }
  25.  
  26. //释放开辟的资源
  27. for (i = ; i < m; i++)
  28. delete[] p[i];
  29. delete[] p;
  30.  
  31. }

注:另一种方法:

row:行

col:列

unsigned int **ppPathes;

*ppPathes = (unsigned int *)calloc(row * col, sizeof(unsigned int));

使用malloc:

*ppPathes = (unsigned int *)malloc(sizeof(unsigned int )*(PathNumTemp) * (pathLenTemp + 1));

C++基础:二维数组动态的申请内存和释放内存的更多相关文章

  1. C++二维数组动态申请内存

    好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到 ...

  2. C Program进阶-二维数组动态内存开辟

    对于二维数组,我们知道可以用Type ArrayName[Row][Colume]的方式来定义,这是一种静态内存开辟的方式,程序在编译的时候就为该数组分配了空间,而且行和列大小也是指定的.这篇文章里我 ...

  3. C语言 二维数组(指针)动态分配和释放(转)

    C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...

  4. C++二维数组动态内存分配

    对于二维数组和二维指针的内存的分配 这里首选说一下一维指针和一维数组的内存分配情况. 一维: 数组:形如int  a[5];这里定义了一个一维数组a,并且数组的元素个数是5,这里的a是这五个元素的整体 ...

  5. C语言基础--二维数组

    二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...

  6. c指针与数组,传参问题,指针数组与数组指针的区别,二维数组动态内存分配

    一 数组的结构:顺序存储,看谭浩强中的图,牢记 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的 ...

  7. Java基础--二维数组

    1.二维数组的定义 二维数组表示行列二维结构,在栈空间中的二维数组的地址指向堆空间中的一维数组,堆空间中的一维数组的地址又指向一维数组所在的内存空间. 2.二维数组的声明 二维数组声明有3种方式,推荐 ...

  8. C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏

    二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ...

  9. C Program基础-二维数组

    一维数组可以看作一行连续的数据,只有一个下标.C语言允许构造二维数组甚至多维数组,在实际问题中有时候常常需要用到二维数组(例如数学上的矩阵),二维数组有两个下标,以确定某个元素在数组中的位置. (一) ...

随机推荐

  1. CloseHandle 函数--关闭一个句柄

    CloseHandle函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx 作用 ...

  2. 发票OCR识别/票据OCR自动识别

    对于一些大的集团公司来说,分散式财务管理模式管理效率不高,管理成本相对较高,同时也制约了集团企业发展战略的实施,因而需要建设财务共享中心.一个企业想建造财务共享中心,面临的难题是大量的数据采集和信息处 ...

  3. Python学习记录----类型匹配(转)

    import types aaa = 0 print type(aaa) if type(aaa) is types.IntType: print "the type of aaa is i ...

  4. 深入理解 JavaScript(三)

    强大的原型和原型链 前言 JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型. 虽然这经常被当作是 JavaScript 的缺点被提及,其实基于原型的继承模型比传统 ...

  5. HDU6043 KazaQ's Socks

    Problem Description KazaQ wears socks everyday. At the beginning, he has n pairs of socks numbered f ...

  6. [COGS 1065] 绿豆蛙的归宿

    先贴题面w 1065. [Nescafe19] 绿豆蛙的归宿 ★   输入文件:ldfrog.in   输出文件:ldfrog.out   简单对比时间限制:1 s   内存限制:128 MB 随着新 ...

  7. 说一说Jquery中的empty()与remove()的区别和用法

    今天在改一个新人写的代码,好吧,我承认改代码比自己写代码要来的痛苦. 主要是在测试一个table.table中有一列是删除操作.我的删除功能是 这样的,当点击删除的时候,判断这个table中的tr行是 ...

  8. 【bzoj3772】精神污染

    Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区, ...

  9. c++文件编译的一些说明

    1,头文件只在于预处理阶段用于完全包含该头文件的内容,每个c文件是一个编译单元,类定义和类声明,变量和函数声明,类内联实现是内部链接,全局变量和函数的定义以及类外部实现是具有全局链接性,假设将所有c单 ...

  10. SSD的传输总线、传输协议、传输接口

    前言:关于SSD,有众多总线类型.协议类型.接口类型,每个接口还包括不同型号,在这里花点时间全部整理一下,整理日期2017-08-08. 1.传输总线 总线就像一条公路,公路上的车好比总线上的电信号: ...