-2

多くの数値を計算するプログラムがありますが、RAM メモリがデータに対して十分に大きくないため、データを配列に格納できません。そこで、データを .txt ファイルに入れるコードを少し書きました。同じプログラムで、openGL/GLUT を使用してデータを表示するために、1 つずつロードし直す必要があります。

.txt ファイルは次のようになります。

number1;number 2;number3;number4;......number N;
number1;number 2;number3;number4;......number N;
number1;number 2;number3;number4;......number N;
...................................................................................
number1;number 2;number3;number4;......number N;

番号 N の後に注意してください。"\n" (入力) が来ます。そして、1 行の長さは 2500 桁です。
データを 1 行ずつロードする必要があるため、使用しますgetline(); が、すべてのフレームには次の行が必要です。

少し単純化するために、読むコードは次のとおりです。

ifstream file("example.txt", ifstream::in);
if(file.is_open())
{
    getline(file, b);
    cout<<b<<"\n"<<"\n";
    file.close();
}

このコードは実際のプログラムのコードではありませんが、問題を示しています。

ここでのコードは正常に動作し、最初の行をロードしてコンソール画面に表示するだけです。そして、openGLの各フレームでそれを行います。そのため、opengl が新しいフレームを開始するたびに、コンソール画面が継続的に更新されます。

しかし、これを追加すると:

ifstream file("example.txt", ifstream::in);
if(file.is_open())
{
    getline(file, b);
    strcpy(resultch, b.c_str());
    cout<<b<<"\n"<<"\n";
    file.close();
}

(resultch が次char* resultch = new char[2550];のように宣言されている場合:) コードは 1 回だけ実行され、プログラムはその後停止します。コンソール画面には次のように表示されます。

proces returned -1073741819 <0x0000005>

毎回正しく実行されないのはなぜですか?

4

2 に答える 2

0

次の場合:

ifstream file("example.txt", ifstream::in);
if(file.is_open())
{
    getline(file, b);
    resultch = malloc( b.length() + 1 );
    strcpy(resultch, b.c_str());
    cout<<b<<"\n"<<"\n";
    file.close();

    free( resultch );
}

追加したのは、文字列のサイズに基づいてメモリを割り当てることだけでした。

于 2013-03-28T19:41:43.023 に答える
-1

これを試して:

ifstream infile;
infile.open ("example.txt", ifstream::in);

std::string line("");

int ch = infile.get();
while (infile.good()) {
    if ((char)ch=='\n'){
         resultch = line.c_str();
         line = "";
         cout << endl << endl;
    }
    else {
         line = line + (char)ch;
         cout << (char)ch; 
    }
    ch = infile.get();
}
infile.close();

それはおそらくあなたが探しているものです。

于 2013-03-28T17:46:26.060 に答える