我有一个我想要克服的数组问题,如果我将const int“are”的值更改为2048,程序运行正常,但是在8192或甚至在4096(只有130,000个元素)它不起作用并且中断.我该如何解决这个问题?
#include <iostream> #include <fstream> #include <windows.h> #pragma warning (disable : 4820 4619 4668 4101) HANDLE ghEvents; const int arc = 2048; const int are = 8192; struct DataStructure_init { int main_seq[are][32]; int main_seq2[are][32]; int main_seq3[are][32]; int main_lim[are]; }; struct DataStructure_trus { int net[arc]; int r6[arc]; int thr[arc]; }; int ftrus (unsigned char cmain[],int array_inst[],DataStructure_trus& va); int finit (DataStructure_trus va,DataStructure_init& in); using namespace std; int main() { unsigned char cmain[are]; int array_inst[64]={0}; DataStructure_trus va; DataStructure_init in; ftrus(cmain,array_inst,va); finit(va,in); cin.get(); } int finit (DataStructure_trus va,DataStructure_init& in) { int nb=0,flag=0,lock=0; for(int i=0;i<are;i++){ for(int j=0;j<24;j++){ in.main_seq[i][j]=va.thr[(i*24)+j]; } } return 0; } int ftrus (unsigned char cmain[],DataStructure_trus& va) { int g=0; ifstream in("C:\\Dev-Cpp\\DCS\\Decom\\trus.txt",ios::binary); unsigned char c; while( in.read((char *)&c,1) ) { cmain[g]=c; if(cmain[g]==' ' && cmain[g-1]=='t' && cmain[g-2]=='e' && cmain[g-3]=='n') {array_inst[1]=g+1;} else if(cmain[g]==' ' && cmain[g-1]=='r' && cmain[g-2]=='h' && cmain[g-3]=='t') {array_inst[9]=g+1;array_inst[21]=g-7;} g++; } array_inst[29]=g-2; for(int i=0;i<64;i++){va.r6[i]=0;} for(int i=array_inst[1];i<array_inst[21];i++){ if(cmain[i]=='1'){va.net[va.r6[1]]=1;va.r6[1]++;} else {va.net[va.r6[1]]=0;va.r6[1]++;} } for(int i=array_inst[9];i<array_inst[29];i++){ if(cmain[i]=='1'){va.thr[va.r6[9]]=1;va.r6[9]++;} else {va.thr[va.r6[9]]=0;va.r6[9]++;} } return 0; }
解决方法
您不必将数组放在main()中的堆栈上,您也可以在进入函数之前静态地分配它们.这将把它们放在一个不受默认堆栈大小限制的区域.
unsigned char cmain[are]; int array_inst[64]={0}; DataStructure_trus va; DataStructure_init in; int main() { ftrus(cmain,va); finit(va,in); cin.get(); }