C++基础:二维数组动态的申请内存和释放内存

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

一、malloc/free

(1)申请一维数组

void dynamicCreate1Array()
{
    int m;
    int i;
    int *p;

    cout<<("please input the length of data:");
    cin >> m;

    p = (int*)malloc(sizeof(int)*m);//动态开辟  

    cout << "please input data" << endl;
    for (i = 0; i < m; i++)
        cin >> p[i];

    cout << "data is :";
    for (i = 0; i < m; i++)
        cout << p[i] << endl;
    free(p);
}

(2)申请二维数组

void dynamicCreate2Array()
{
    int m, n;
    int i, j;
    int **p;

    printf("please input the row and col:");
    cin >> m >> n;
    //scanf("%d%d", &m, &n);

    p = (int**)malloc(sizeof(int*)*m); //开辟行  

    for (i = 0; i < m; i++)
    {
        *(p + i) = (int*)malloc(sizeof(int)*n);//开辟列
    }
    //输入数据
    printf("please input data:");
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            cin >> p[i][j];
    //输出数据
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            cout << p[i][j];
        }
        cout << endl;
    }
    //释放开辟的二维空间
    for (i = 0; i < m; i++)
        free(*(p + i));
}

二、new/delete

(1)申请一维数组

void DynamicCreate1Array()
{
    int len;
    int i;

    cout << "please input the length of data: ";
    cin >> len;

    int *p = new int[len];

    cout << "please input data: ";
    for (int i = 0; i < len; i++)
        cin >> p[i];

    cout << "data is " << endl;
    for (i = 0; i < len; i++)
        cout <<p[i] << endl;

    delete[] p;
}

(2)申请二维数组

void DynamicCreate2Array()
{
    int m, n;
    int i;
    cout << "input row and col: ";
    cin >> m >> n;

    //动态开辟空间
    int **p = new int*[m]; //开辟行
    for (int i = 0; i < m; i++)
        p[i] = new int[n]; //开辟列  

    cout << "input data: ";
    for (i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            cin >> p[i][j];

    cout << "output: " << endl;
    for (i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
            cout <<  p[i][j]<<" ";
        cout << endl;
    }

    //释放开辟的资源
    for (i = 0; i < m; i++)
        delete[] p[i];
    delete[] p;

}
时间: 2024-12-28 11:29:24

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

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

好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到了,顺便写下来,适当时候给C++初学者用用. -----------C++二维数组动态申请内存-------------- 如果对new和delete不是很了解的话可以到这里来看看,http://www.cnblogs.com/hazir/p/new_and_delete.html 首先,我们一般需

vector动态二维数组(容器的容器)占用内存分析

之前在这里写过一篇"C++中的动态二维数组".在C++中没有动态二维(多维)数组.但是根据原理我们可以自己创建. 在看过STL的vector源代码后"<STL源码剖析>---stl_vector.h阅读笔记"后,想到可以用容器的容器来做二维数组. 创建一个2x4的二维数组.想到的办法是:先创建一个容器的容器,外层大小的2(2行),然后里面容器小大为4(4列). int row=2,col=4; vector<vector<int> &g

蓝鸥Unity开发基础—— 二维数组学习笔记

蓝鸥Unity开发基础-- 二维数组学习笔记 一.二维数组 有两个下标的数组叫做二维数组 类似[,]数组名=new类型[常量表达式1,常量表达式2] int[,] numbers= new int[2,3]; [0,0] [0,1] [0,2] [1,0] [1,1] [1,2] 举例说明 using System; namespace Lesson16{    class MainClass    {        public static void Main (string[] args)

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

C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按照16位.32位.64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位.32位的更快.而且除了运算能力之外,与32位处理器相比,64位处理器

一维和二维数组 动态内存分配

一维数组的动态内存分配 #include "stdafx.h" #include <iostream> using namespace std; int main() { int length,i; int *p; cin>>length; p=new int[length]; for(i=0;i<length;i++) { p[i]=i; //不要写成*p[i]=i; cout<<p[i]<<endl; //不要写成cout<

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

对于二维数组和二维指针的内存的分配 这里首选说一下一维指针和一维数组的内存分配情况. 一维: 数组:形如int  a[5];这里定义了一个一维数组a,并且数组的元素个数是5,这里的a是这五个元素的整体表示,也就是通过a我们能找到这五个元素.注意:a是代表数组第一个元素的首地址.&a是代表数组的地址,虽然它们的值相同. 指针: int *p = NULL:这里p是一个指针,它指向的是计算 机内一块存储int类型的内存.P = a;就是让p等于刚才申请的数组的第一个元素的地址.所以通过p我们也能找到

6、JAVA基础-二维数组 及 面向对象理解

1:二维数组(理解) (1)元素是一维数组的数组. (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][] 数组名 = new 数据类型[m][]; C:数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}}; D:数据类型[][] 数组名 = {{...},{...},{...}}; (3)案例(掌握): A:二维数组的遍历 B:二维数组的求和 C:杨辉三角形 2:两个思考题(理解) (1)Java中的参数传递

黑马程序员——C语言基础---二维数组详解

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 二维数组: 可以看做是一个特殊的一维数组 ,这个一维数组的每个元素又是一个一维数组 二维数组的定义 数据类型   数组名[第一维的长度(行)][第二维的长度(列)]; int a[2][3];       理解方法:       1)这是

java基础 ---- 二维数组

--------   多维数组 之二维数组 三维以上的就很少使用了主要使用的就是二维数组,从j内存的分配原理角度来讲只有一位数组 -------  二维数组 一维数组的就是用下标标识数组元素的位置 二维数组实际上就是一个一维数组,他的每一个元素又是一个一维数组 ---  存储分布 实现方式 原文地址:https://www.cnblogs.com/obge/p/10741016.html