C ++程序崩溃时文件读取错误

时间:2015-02-25 16:09:39

标签: c++

我一直在使用这段代码从文件中读取整数,但是当它与太多元素一起使用时,它看起来像是崩溃了。该文件在第一行显示要放入数组中的数字,然后下一行包含数字。使用1000000个元素进行测试(这是我的最终目标)似乎会使程序崩溃。

示例输入文件:

8
5
6
1
4
9
3
1
2

代码:

ifstream fin;  
ofstream fout;  

fin.open("share.in", ios::in);  
fin >> days;  
int incomes[days];  
for(int i = 0; i < days; i ++){  
    fin >> incomes[i];  
    athroisma += incomes[i];  
    if(incomes[i] > minDiafora){  
        minDiafora = incomes[i];  
    }  
}  

可能是什么问题以及您建议使用哪些阅读方法?

2 个答案:

答案 0 :(得分:1)

只需使用矢量:

#include <vector>

//...

ifstream fin;  
ofstream fout;  

fin.open("share.in", ios::in);  
fin >> days;  
vector<int> incomes;  /***DECLARATION***/    
incomes.resize(days); /***TAKE SIZE***/

for(int i = 0; i < days; i ++){  
    fin >> incomes[i];  
    athroisma += incomes[i];  
    if(incomes[i] > minDiafora){  
        minDiafora = incomes[i];  
    }  
}

//do something...

此处参考: http://www.cplusplus.com/reference/vector/vector/

你不应该为noconst-sizes使用静态数组:)

答案 1 :(得分:0)

基于发布的代码的一些注释:

  • 您无需跟踪所有元素
  • 你也不在乎文件本身有多长

如何使用仅向前阅读执行您想要的操作的示例:

ifstream fin;  
ofstream fout;  
int days;
int income;
int minDiafora = std::numeric_limits<int>::min();
int athroisma = 0;
fin.open("share.in", ios::in);  
fin >> days; // ignore first
while(fin >> income) // implicitly checks to see if there is anything more to read
{
    athroisma += income;
    minDiafora = std::max(minDiafora, income)
}