我的文件末尾出现以下错误:
Program received signal SIGSEGV, Segmentation fault.
At X:\Sorted\Coding\C++\Weighted Grade Calculator\Source.cpp:55
我不明白为什么会这样,因为有问题的行只包含}
。看看:
#include<iostream>
using namespace std;
int main(){
int numberweights;
int current = 1;
bool verbose = true;
float grades[] = {}, weights[] = {};
cout << "How many weights are there?";
cin >> numberweights;
/*-----------------------------------------------------*/
for(int i = numberweights; i > 0; i--) {
cout << "What is the weight for weight #" << current << "?";
cin >> weights[current - 1];
current++;
if(verbose) {
cout << "\n";
cout << "I:" << i << " " << "current:" << current << endl;
}
}
current--;
int rep = 0;
cout << weights[0];
cout << weights[1];
return 1;
}
通常,i
会随机跳转到超过10亿的数字。为什么会这样?
答案 0 :(得分:1)
将数组更改为std :: vector,然后执行调整大小以使其达到所需大小。 由于您正在写入尚未按照定义方式分配的内存,因此当您尝试写入阵列时,我可能正在跳转,因为您正在写入它。一旦你写了一个足够大的工作阵列(或矢量),你的&#39; i&#39;应该按预期行事
欢迎使用未定义的行为。
答案 1 :(得分:0)
您的计划格式不正确,因为:
float grades[] = {}, weights[] = {};
grades
和weights
是零长度数组。
g ++报告这是一个错误,为什么clang,错误地使它成为一个警告(因为他们将它与灵活的成员数组混淆,这是C ++的扩展,取自C99)。