-1

次のようなテキストファイルがあります。

173865.385  444879.102  0.299
173864.964  444879.137  0.467
173864.533  444879.177  0.612
173864.113  444879.211  0.798
173863.699  444879.244  1.002
173863.27   444879.282  0.926
173862.85   444879.317  0.974
....
....
....(around 200000 rows)

各列を1つの配列に入れようとしています。今、私はこれらのクリプトを持っています:

int ReadDataFromFile(double * DataList[] ,int DataListCount,string &FileName)
{
    ifstream DataFile;
    int CurrentDataIndex = 0;;
    DataFile.open(FileName.c_str(),ios::in);
    if(DataFile.is_open()==true)
    {
        char buffer[200];
        while(DataFile.getline(buffer,200))
        {
            string strdata;
            stringstream ss(buffer);
            for(int i =0;i<DataListCount;++i)
            {
                getline(ss,strdata,' ');
                DataList[i][CurrentDataIndex] = strtod(strdata.c_str(),NULL);
            }
            ++CurrentDataIndex;
        }
    }
    return CurrentDataIndex;
}


int _tmain(int argc, _TCHAR* argv[])
{
    double a[200000],b[200000],c[200000];
    double* DataList[] = {a,b,c};
    int DataCount = ReadDataFromFile(DataList,3,string("D:\\read\\k0_test.txt"));
    for(int i=0;i<DataCount;++i)
    {
        cout<<setw(10)<<a[i]<<setw(10)<<b[i]<<setw(10)<<c[i]<<endl;
    }
    system("pause");
    return 0;
}

ただし、常に「オーバーフロー」というエラーが表示されます。この問題を解決する他の方法はありますか?

4

2 に答える 2

0
 double a[200000],b[200000],c[200000];

プログラムのすべてのスタック スペースを使い果たした場合std::vectorは、代わりにヒープにメモリを割り当てる動的配列を使用するか (推奨)、動的配列を使用してみてください。

例: (a専用)

vector<double> a;
a.reserve(200000);

または

vector<double> a(200000);

動的配列を使用する場合:

double* a = new double[200000];

それらを使い終わったら、忘れずにメモリを解放してください:

delete [] a;

詳細については、 STL ベクトルを参照してください。

于 2013-05-06T16:24:44.340 に答える
0

2 つの解決策:

_tmain の外に移動double a[200000],b[200000],c[200000];して、グローバル変数にできるようにします。

または、

a、b、c を次のように宣言します。

double *a = new double[200000]; 
double *b = new double[200000]; 
double *c = new double[200000];

それらを解放することを忘れないでくださいdelete[]

お役に立てれば :)

于 2013-05-06T16:30:57.667 に答える