0

私は C++ を初めて使用し、この単純な問題で苦労しています。次のコードは、奇妙な動作を示します。一連の数字をテキスト ファイルに出力して、所要時間を計ろうとしています。より小さい n (< 5000) の場合、コードは実行されますが、作成されるテキスト ファイルはぎこちなくなります。n > 10000 の場合、プログラムは「セグメンテーション違反 (コア ダンプ)」というエラーでクラッシュします。

これが私のコード全体です。

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

using namespace std;

double listN(int n)
{
    clock_t start = clock();
    ofstream resultsfile;

    resultsfile.open("Number.txt");

    for (int i = 0; i < n; i++)
    {
    resultsfile << i + "\n";
    }

    resultsfile.close();

    return (1000 * (clock() - start)/(double) CLOCKS_PER_SEC);
} 


int main()
{
    const int NUM_RUNS = 20;
    double time = 0;
    int n;

    cout << "Enter the value n:";
    cin >> n;

    for (int i = 0; i < NUM_RUNS; i++)
    {
     time += listN(n);
    }

    cout << time / NUM_RUNS <<endl;
    return 0;
}

誰かが問題について考えを持っていますか?

4

1 に答える 1

2

整数と新しい行をファイルに出力し、それらを「追加」したくないので、この行

resultsfile << i + "\n";

する必要があります

resultsfile << i << "\n";

次回は、-gオプションを指定してプログラムをコンパイルし、 内で実行しますgdb。プログラムを実行して segfault を受け取ったら、 と入力backtraceして、コードが壊れた場所を確認します。このように、セグメンテーション違反はそれほど不可解ではありません。

于 2013-09-08T21:02:01.963 に答える