C++|使用雙重指針動態申請大容量需求的二維數組避免棧溢出

函數內每塊被申請的內存都被稱為棧變量,如果所申請的整塊內存大小大於棧空間的限定時,就被稱為棧舉出。

如在函數內有下列代碼:

int arr[1000][1000];

編譯時會有出錯提示:

C++|使用雙重指針動態申請大容量需求的二維數組避免棧溢出

因為數組都是整塊申請的,為了避免棧舉出,解決方法是採用動態申請內存,並且使用雙重指針變量來使用多塊堆空間:

#include <iostream>
using namespace std;
void main()
{
//int a[1000][1000];//靜態申請,整塊棧空間會超出棧空間大小
int **a=new int*[1000];//動態申請1000個指針
for(int k=0;k<1000;k++)
a[k]=new int[1000];//動態申請每個指針指向的動態數組
for(int i=0;i<1000;i++)//初始化
{
for(int j=0;j<1000;j++)
a[i][j]=i+j;
}
delete []a;//釋放
a=NULL;
}
/<iostream>

-End-


分享到:


相關文章: