由于char数组太大而导致堆栈溢出

时间:2013-07-25 09:50:41

标签: c++ visual-studio-2010 stack-overflow

c ++初学者,刚刚遇到我的第一个堆栈溢出错误!

我已经创建了一个程序,可以解析当时一行中的两个非常大的文件(几百万行)。下面的子函数获取两个ifstream对象(& referencePop和& wantedPop)并使用fstreams getline()解析它们。

由于文件中的几行真的很大,我不得不增加我的charBuf数组的大小,但最终我的程序因堆栈溢出错误而崩溃...如果我也这样做了while循环在到达eof之前会断开,如果它们太大=溢出......

我有一个完全不同的程序版本,使用std :: string和std :: stringstream进行解析,设法解析整个文件,然而却非常缓慢。我想尝试使用下面的内容并比较性能......

有没有办法改变我的charBuf数组大小以匹配每行的getline?许多行只会是几个字符(char [128]应该足够了)...在这些行上有不必要的大字符数组会有性能影响吗?

char charBufA[512000], charBufB[512000];
    char *next_tokenA = NULL;
    char *next_tokenB = NULL;
    bool nextLine;
    int counter=0,nOfLines=0, intBufA, intBufB;
    double testValue;
    while(referencePop.getline(charBufA,512000)&&wantedPop.getline(charBufB,512000)){
        nOfLines++;
        nextLine=true;
        char* charBufAP = strtok_s(charBufA,"\t", &next_tokenA);
        char* charBufBP = strtok_s(charBufB,"\t", &next_tokenB);
            a lot more operations...
    }

0 个答案:

没有答案