iT邦幫忙

2

【c/c++學習筆記】利用malloc動態宣告陣列,free釋放記憶體空間

c++

此文僅做為自己學習筆記之用,
由於malloc函數自己非常少用,
很容易忘記語法怎麼寫,
故筆記一下以便備忘

範例程式碼

譬如說用malloc宣告一個x*y*z大小的三維陣列:

#include <iostream>
using namespace std;

int main()
{
    int x=4, y=6, z=3;
    int ***Array;
    Array = (int***)malloc(x*sizeof(int**));
    for(int i=0;i<x;i++)
    {
        Array[i]=(int**)malloc(y*sizeof(int*));
        for(int j=0;j<y;j++)
        {
            Array[i][j] = (int*)malloc(z*sizeof(int));
        }
    }

    //賦值
    for(int i=0;i<x;i++)
    {
        for(int j=0;j<y;j++)
        {
            for(int k=0;k<z;k++)
                Array[i][j][k] = i*(j+k);
        }
    }

    //嘗試把三維陣列印出
    for(int i=0;i<x;i++)
    {
        for(int j=0;j<y;j++)
        {
            for(int k=0;k<z;k++){
                cout << Array[i][j][k] <<" ";
            }
            cout<<endl;
        }
        cout<<endl;
    }

    //free,網上說寫程式的好習慣是用了malloc後要記得free
    for(int i=0;i<x;i++)
    {
        for(int j=0;j<y;j++)
        {
            free(Array[i][j]) ;
        }
        free(Array[i]);
    }
    free(Array);
    return 0;
}

結果:

0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 
0 0 0 

0 1 2 
1 2 3 
2 3 4 
3 4 5 
4 5 6 
5 6 7 

0 2 4 
2 4 6 
4 6 8 
6 8 10 
8 10 12 
10 12 14 

0 3 6 
3 6 9 
6 9 12 
9 12 15 
12 15 18 
15 18 21 

另外記錄下自己的發現:
一個函數內無法宣告太大的靜態陣列,
若是用全域變數宣告很大的靜態陣列或是在函數內用malloc動態陣列的方式宣告就OK


尚未有邦友留言

立即登入留言