在freopen中读取大文本后,C ++程序停止工作

时间:2017-04-11 01:53:03

标签: c++ io

我正在从txt生成输出,也从txt生成输入,但是,txt文件是79MB。我不知道它为什么停止工作,而且,我使用循环输入,输入文本中的行是9.000.000行,所以我需要循环3000 ^ 2,但我不知道#39;知道什么是错的,它在编译之后就崩溃了。 这是代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    freopen("hex.txt","r",stdin);
    freopen("css.txt","w",stdout);
    cout << ".container{\nwidth: 3000px;\nheight: 3000px;\n}\n";
    cout << ".px{\nfloat: left;\nwidth: 1px;\nheight: 1px;\n}\n";
    string hex[3000][3000];
    for (int i=0; i<3000; i++)
    {
            for (int j=0; j<3000; j++)
            {
                cin >> hex[i][j];
            }
    }
    for (int i=0; i<3000; i++)
    {
        for (int j=0; j<3000; j++)
        {
            cout << ".b" << i+1 << "k" << j+1  << "{\nbackground: "<< hex[i][j] << ";\n}" << endl << endl;
        }

注意:hex.txt大小为79MB,当它停止工作时,&#34; css.txt&#34; (输出文件)不存在,当程序试图读取freopen时,我确定它会崩溃(&#34; hex.txt&#34;,&#34; r&#34;,stdin) ; 我也使用Codeblocks 16.01,如果我删除代码中的第5行,它仍然会崩溃,我只是在我的代码块中调试它说分段错误,我该如何解决这个问题?谢谢! 编辑:问题在cin之后立刻被cout解决了,那就是他的工作!我还没有尝试使用矢量,但现在我知道使用字符串hex [3000] [3000]没有用,因为空间太小。 对不起我的英文不好。

1 个答案:

答案 0 :(得分:0)

string hex [3000] [3000]; 堆栈空间太小,无法分配大型数组,您可以使用vector&lt; vector&lt; string&gt;&gt;避免这种情况。 如

vector<vector<string> > hex(3000, vector<string>(3000));