数组大小限制 [英] Array size limits

查看:151
本文介绍了数组大小限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个我想要克服的数组问题,如果我将const intare的值更改为2048,程序运行正常,但在8192甚至4096(只有13万个元素),它不工作和中断。我如何解决这个问题?

  #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);

使用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; (int i = 0; i< are; i ++){

for(int j = 0; j< 24; j ++){
in main_seq [i] [j] = va.thr [(i * 24)+ j]
}

}

返回0;
}



int ftrus(unsigned char cmain [],int array_inst [],DataStructure_trus& va)
{

int g = 0;
ifstream in(C:\\\Dev-Cpp\\\DCS\\\Decom\\\trace.txt,ios :: binary);
unsigned char c;
while(in.read((char *)& c,1))
{
厘米[g] = c;
if(cmain [g] ==''&& cmain [g-1] =='t'&& cmain [g-2] =='e'&& g-3] =='n'){array_inst [1] = g + 1;}
else if(cmain [g] ==''&& cmain [g-1] ==' '&& cmain [g-2] =='h'&& cmain [g-3] =='t'){array_inst [9] = g + 1; array_inst [21] = g-7 ;}
g ++;
}
array_inst [29] = g-2; (int i = array_inst [1];

for(int i = 0; i< 64; i ++){va.r6 [i] = 0;}

i = {va.r6 [1]] = 1; va.r6 [1] ++; i< array_inst [21]; i ++){
if(cmain [i] =='1' }
else {va.net [va.r6 [1]] = 0; va.r6 [1] ++;}
}

for(int i = array_inst [9]; 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,array_inst,va);
finit(va,in);
cin.get();
}


I have an array problem that i want to overcome, if i change the value of const int "are" to 2048 the program runs fine but at 8192 or even at 4096 ( just 130,000 elements) it does not work and breaks. How do i get around this ?

#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;
}

解决方案

You don't have to put the arrays on the stack in main(), you can just as well allocate them statically before entering the function. That will put them in an area that is not limited by the default stack size.

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();
 }  

这篇关于数组大小限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆