for循环c ++中的分段错误

时间:2018-08-25 12:52:51

标签: c++

分段错误

myX = .SeriesCollection(Arg1).XValues()(Arg2)
myY = .SeriesCollection(Arg1).Values()(Arg2)

请帮助我找出为什么此代码是分段错误

2 个答案:

答案 0 :(得分:5)

由于a在构造b时尚未初始化,因此我们不知道b有多大。之后再通过用户输入a来设置cin的值,对b的大小不再有影响。

要使此代码段起作用,您必须在声明周围进行交换:

int a = 0;
int total = 0;
cin>>a;
int b[a];

但是,由于可变长度数组仅是GCC扩展,因此该代码非常不可移植。

如果要扩展数组,则应使用std::vector

std::vector<int> b;
int a = 0;
int total = 0;
cin >> a;
b.resize(a);

for(int i = 0;i < a;i++) {
  cin>>b[i];
  total=total+b[i];
}

请确保#include <vector>

请注意,尽管在两种情况下cin提取都可能失败。您应该为此添加错误检查。


最后一点:不要使用using namespace std;,要习惯写std::

答案 1 :(得分:3)

请在启用警告的情况下进行编译:

prog.cc:7:13: warning: variable 'a' is uninitialized when used here [-Wuninitialized]
    int a,b[a],total=0;
            ^
prog.cc:7:10: note: initialize the variable 'a' to silence this warning
    int a,b[a],total=0;
         ^
          = 0