Gam*_*ing 6 c++ arrays data-structures
我有一个我想要克服的数组问题,如果我将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[],int array_inst[],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;
}
Run Code Online (Sandbox Code Playgroud)
动态分配数组,因为通常会限制堆栈上可以有多少数据(这是自动局部变量通常最终的位置):
unsigned char* cmain = new unsigned char[are];
Run Code Online (Sandbox Code Playgroud)
您不必将数组放在 main() 中的堆栈上,您也可以在进入函数之前静态分配它们。这会将它们置于不受默认堆栈大小限制的区域。
unsigned char cmain[are];
int array_inst[64]={0};
DataStructure_trus va;
DataStructure_init in;
int main() {
ftrus(cmain,array_inst,va);
finit(va,in);
cin.get();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2196 次 |
| 最近记录: |