我是 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;
}
有人知道这个问题吗?
最佳答案
因为您想将整数和新行打印到文件中,而不是“添加”它们,这一行
resultsfile << i + "\n";
应该是
resultsfile << i << "\n";
下次,使用-g
选项编译您的程序并在gdb
中运行它。运行程序并收到段错误后,键入 backtrace
,这样您就可以看到代码在哪里出错了。这样segmentation fault就不会那么神秘了。
关于c++ - 神秘的c++段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18688595/