1

リンクされたリストをバイナリとして保存およびロードする関数を作成しています。関数をロードしようとすると停止します。プログラムはクラッシュしたりフリーズしたりしませんが、指定されたポイントを超えて続行することはありません:

 void fLoad(char* fname)
{
    fstream fin;
    fin.open(fname, fstream::in|fstream::binary);

    if(fin.fail())
        {
            cerr<<"unable to open file";
            exit(0);
        }
    cout<<"File open";

    fin.read((char*) &N, sizeof(int));
    cout<<N;
    system("pause");
    for(int i=0;i<N;i++)
    {
        Clinked* current = new Clinked;

        fin.write(current->site_name,sizeof(char)*100);
        fin.write((char*) &current->cood_x,sizeof(double));
        fin.write((char*) &current->cood_y,sizeof(double)); 
        fin.write((char*) &current->dip,sizeof(double)); 
        fin.write((char*) &current->strike,sizeof(double)); 

        //fin.write((char*) current, sizeof(Clinked));

        current->next=start;
        start=current;
    } //at this point it stops

    cout<<"\n"<<fname<<" was read succesfully";
    fin.close();
    cout<<endl;
}

N が途方もなく大きいということでもありません。私はチェックしました

4

1 に答える 1

1

コメントで指摘されているように、あなたはwriteの代わりに使用していますread。コードはおそらく例外をスローします。例外がスローされたときにDebug > Exceptionsメニューで確認してください。Break

私はあなたのコードは次のようになるべきだと思います:

void fLoad(char* fname)
{
    fstream fin;
    fin.open(fname, fstream::in|fstream::binary);

    if(fin.fail())
    {
        cerr<<"unable to open file";
        exit(0);
    }
    cout<<"File open";

    fin.read((char*) &N, sizeof(int));
    cout<<N;
    system("pause");
    for(int i=0;i<N;i++)
    {
        Clinked* current = new Clinked;

        fin.read(current->site_name,sizeof(char)*100);
        fin.read((char*) &current->cood_x,sizeof(double));
        fin.read((char*) &current->cood_y,sizeof(double)); 
        fin.read((char*) &current->dip,sizeof(double)); 
        fin.read((char*) &current->strike,sizeof(double)); 

        //fin.read((char*) current, sizeof(Clinked));

        current->next=start;
        start=current;
    } //at this point it stops

    cout<<"\n"<<fname<<" was read succesfully";
    fin.close();
    cout<<endl;
}
于 2012-12-13T02:11:40.140 に答える