2013-09-08 3 views
0

Я новичок в C++ и испытываю некоторые трудности с этой простой проблемой. Следующий код демонстрирует странное поведение. Я пытаюсь напечатать кучу чисел в текстовый файл и время, сколько времени потребуется. Для меньшего n (< 5000) код запускается, но текстовый файл, который создается, является jibberish. При n> 10000 программа вылетает с ошибкой «segmentation fault (core dumped)».таинственная ошибка сегментации C++

Вот мой код в полном объеме:

#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; 
} 

Кто-нибудь есть идея, как к этой проблеме?

ответ

2

Как вы хотите, чтобы вывести целое и новую строку в файл, а не «добавить» их, эта линия

resultsfile << i + "\n"; 

должен быть

resultsfile << i << "\n"; 

В следующий раз, компилировать ваш с опцией -g и запустите ее внутри gdb. После запуска программы и получения segfault введите backtrace, чтобы вы могли видеть, где ваш код сломался. Таким образом, ошибка сегментации не будет столь загадочной.

+0

Magic! Работала отлично. Благодарю. Знаете ли вы, почему это дало разное поведение для малых и больших n? –

+0

Я думаю, что вы печатали мусор внутри файла. Однако с небольшими значениями 'i',' i + "\ n" 'все еще указывали на место в памяти, где есть разрешения для чтения. –

+0

Поиск в Интернете для «где хранятся строковые литералы». –