三級指標動態分配/釋放記憶體(C / C++)
阿新 • • 發佈:2019-02-03
俗話說,沒有對比就沒有傷害。本文提供兩個語言版本的三級指標分配/釋放方法。
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; }