数组分段错误

3

我遇到了一个关于分段错误的问题。 看下面:

#include<fstream>
using namespace std;
int main(){
    int n,i,vector[10001],vectorcopy[10001];
    ifstream in("program.in");
    ofstream out("program.out");
    in>>n;
    for(i=1;i<=n;i++){
        in>>vector[i];
        vectorcopy[i]=vector[i];
    }
    return 0;}

调试器显示:

程序接收到信号 SIGSEGV,段错误

请告诉我该怎么做!


4
在调试器中运行它,它将告诉你在调用堆栈的哪个位置以及哪一行出现了“segfault”。 - Caribou
1
你的程序从未检查任何操作是否成功。它可能在任何时候失败。 - Kerrek SB
输入文件为:7 1 5 7 4 6 2 9 - user1849298
1
你的 for 循环需要是 for(i = 0 ; i < n; ++i)。在 C 和 C++ 中,数组是从零开始索引的。 - user93353
1
避免将变量命名为stl类(vector,string等)。特别是因为您编写了“using namespace std;”。顺便说一句,也要避免这样做。 - borisbn
显示剩余2条评论
1个回答

2

如果输入文件program.in正确,那么您的程序(大多数情况下)应该是正常工作的。我猜测您的分段错误错误是由以下原因引起的:

  • 不良输入
  • 程序中缺少输入检查

使用这个program.in输入文件,我没有发现任何错误:

10
1
2
3
4
5
6
7
8
9
10

其他错误

我之前说“大部分”是因为你的程序中还有一些其他错误。它们现在并没有引起麻烦(C++称之为“未定义行为”),但迟早会造成问题:

  • for an array of size n, indexes start at 0 and end at n - 1; when using arrays, do not write your for statement like this:

    for (i = 1; i <= n; i++)
    

请将其重写为:

    for (i = 0; i < n; i++)
  • 你没有使用vectorcopy数组
  • 你没有向program.out输出文件中写入任何内容

他正在for循环中使用vectorcopy数组。 - user93353
只要他不读取超过vector [10000],也不写入超过vectorcopy [10000],他的代码就能正常运行。 - Danilo Piazzalunga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接