1. 程式人生 > >三級指標動態分配/釋放記憶體(C / C++)

三級指標動態分配/釋放記憶體(C / C++)

俗話說,沒有對比就沒有傷害。本文提供兩個語言版本的三級指標分配/釋放方法。

C語言版本

#include <stdio.h>
#include <stdlib.h>

#define high 2
#define row  3
#define col  4 
int main()
{   
    int i,j,k;   // p[2][3][4]
    
    int ***p;
    p = malloc( sizeof(int **)*high); 
    for(i=0; i<high; i++) 
    { 
        p[i]= malloc( sizeof(int *)*row);//new int *[3]; 
        for(j=0; j<row; j++) 
            p[i][j]= malloc( sizeof(int )*col);//new int[4]; 
    }
    
    //輸出 p[i][j][k] 三維資料
    for(i=0; i<high; i++)   
    {
        for(j=0; j<row; j++)   
        { 
            for(k=0;k<col;k++)
            { 
                p[i][j][k]=i+j+k;
                printf("%d ",p[i][j][k]);
            }
            printf("\n");
        }
        printf("\n");
    }
    
    // 釋放記憶體
    for(i=0; i<high; i++) 
    {
        for(j=0; j<row; j++) 
        {   
            free(p[i][j]);   
        }   
    }       
    for(i=0; i<high; i++)   
    {       
        free(p[i]);   
    }   
    free(p);  
    return 0;
}

C++版本

#include <iostream>
using namespace std;
 
int main()
{   
    int i,j,k;   // p[2][3][4]
    
    int ***p;
    p = new int **[2]; 
    for(i=0; i<2; i++) 
    { 
        p[i]=new int *[3]; 
        for(j=0; j<3; j++) 
            p[i][j]=new int[4]; 
    }
    
    //輸出 p[i][j][k] 三維資料
    for(i=0; i<2; i++)   
    {
        for(j=0; j<3; j++)   
        { 
            for(k=0;k<4;k++)
            { 
                p[i][j][k]=i+j+k;
                cout<<p[i][j][k]<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
    }
    
    // 釋放記憶體
    for(i=0; i<2; i++) 
    {
        for(j=0; j<3; j++) 
        {   
            delete [] p[i][j];   
        }   
    }       
    for(i=0; i<2; i++)   
    {       
        delete [] p[i];   
    }   
    delete [] p;  
    return 0;
}