c/c++中二維數據的動態創建與釋放

給數組動態分配內存或者初始化,是因爲我們不知道要分配多少個數

 

1,c語言中動態的分配二維數組

使用malloc()、free()函數進行動態分配,這兩個函數包含於stdlib.h或malloc.h中

假如要申請一個3行5列的二維數組內存

#include <stdlib.h>
int main()
{
    // 爲二維數組分配3行
    int **a = (int **)malloc(3 * sizeof(int *));    //注意這裏面是int*
    // 爲每行分配5列
    for(int i = 0; i < 3; i++)
    {
         a[i] = (int *)malloc(5 * sizeof(int));    //這裏面的只是int
    }
    return 0;
}

釋放內存:

1 // 先釋放每列
2 for(int i = 0; i < 3; i++)
3     free(a[i]);
4 // 再釋放每行
5 free(a);
6 a = NULL; // 賦空

以上轉自:https://www.cnblogs.com/0xWitch/p/9314621.html

 

2,下面是c++中動態分配二維數組:

一直對二維數組 動態分配問題比較模糊,今天來終結一下。

我們一般使用二維數組可以直接定義如下:

#include<iostream>
using namespace std;
 
int main()
{
    int array[5][5];
}

但是有時候我們不知道數組的維數,C++不允許直接用變量作爲維數,所以就要用到動態分配。我們先看看如何動態申請一個一維數組。

int* array=new int[10];

上述兩行代碼的意思就是用new申請 10個 int 類型的空間,然後返回這段空間的首地址,將這個地址賦給array。array是一個指向int 型的指針,且指向那塊申請的空間。


申請二維數組需要對指針的理解比較透徹,代碼如下:

int row=3;
int col=5;
int** array=new int* [row];        //先申請一個一維數組
//再接着循環在數組裏面申請數組
for(int i=0;i<row;i++)
{
    array[i]=new int[col];
}

第3行先申請int* 型數組的的空間,該空間存放的是int*型的指針變量,然後把這塊指針變量的空間首地址賦給array,

然後再給int* 類型的指針分別分配空間即可,如下圖:

關於二維數組的釋放:

動態分配的內存需要我們手動釋放,代碼如下:

for(int i=0; i<row; i++) 
{
    //先將數組裏面的每一個數組的空間釋放點
    delete[] array[i];
}
//再釋放整個數組
delete[] array;


很簡單就不再多講了。

以上內容裝載自:https://blog.csdn.net/c12345423/article/details/53056116 
 

整個完整的代碼如下所示:

#include <iostream>
int main(void)
{
    //動態分配二維數組的辦法
    int **p = NULL;       //這裏申請一個3x4的二維數組
    p = new int *[3];     //分配一維指針,分配三個int* 類型的一維指針。 
    for (int i = 0;i < 3; ++i)
    {
        p[i] = new int[4];
    }

    //初始化二維數組
    for (int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 4 ; ++j)
        {
            p[i][j] = i*j;
            std::cout<<p[i][j]<<" ";
        }
        std::cout<<std::endl;
    }
    
    //釋放二維數組
    for (int i = 0;i < 3;++i)    //釋放
    {
        delete [] p[i];
    }
    delete [] p;
    system("pause");
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章