分段错误
myX = .SeriesCollection(Arg1).XValues()(Arg2)
myY = .SeriesCollection(Arg1).Values()(Arg2)
请帮助我找出为什么此代码是分段错误
答案 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