C++ 在堆上開拓與釋放二維、三維指針具體解析。本站提示廣大學習愛好者:(C++ 在堆上開拓與釋放二維、三維指針具體解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C++ 在堆上開拓與釋放二維、三維指針具體解析正文
進修C++老手平日會對指針的應用比擬頭疼,其實指針的概念很簡略,只需能悟清晰如許一個簡略的事理就可以對指針有必定的熟悉了: 例如 int *a = new int[10]; 一維指針其實就相當於一維數組,不消去看書上所說的數組在內存中的首地址這些艱澀的話,以此類推 二維指針就相當於二維數組,老手對一維數組的開拓與釋放比擬輕易熟習,例如下面的a 釋放就是 delete []a; a = NULL; 留意a = NULL; 必需要加上,如許是為了不這個指針會釀成“野指針”。寫法式時必定要留意標准性和嚴謹性,防止能夠會湧現的毛病。
//二維指針的開拓與釋放
int **b = NULL;
b = new int*[10];
for(int i = 0; i != 10; ++i)
{
b[i] = new int[50];
memset(b[i], 0, sizeof(int)*50);
}
//如許就在堆上開拓了int類型的二維指針,年夜小為10*50,相當於在堆上一個二棧數組int b[10][50];
for(int i = 0; i != 10; ++i)
{
delete []b[i];
b[i] = NULL;
}
delete []b;
b = NULL;
//三維指針的開拓與釋放
int ***a = NULL;
a = new int**[10];
for(int i = 0; i != 10; ++i)
{
a[i] = new int*[50];
for(int j = 0; j != 50; ++j)
{
a[i][j] = new int[30];
memset(a[i][j], 0, sizeof(int)*30);
}
}
//如許就在堆上開拓了int類型的三維指針,年夜小為10*50*30,相當於在棧上一個二維數組int a[10][50][30];
for(int i = 0; i != 10; ++i)
{
for(int j = 0; j != 50; ++j)
{
delete []a[i][j];
a[i][j] = NULL;
}
delete []a[i];
a[i] = NULL;
}
delete []a;
a = NULL;