为什么我在以下代码中遇到分段错误? 此代码以第一个元素为0的数组开始。然后是一个数组t,其元素是s的补码,然后是t,它被附加到s,直到size大于1000。 然后,用户输入查询的数量,并打印具有数组s的索引x的元素。
#include <bits/stdc++.h>
using namespace std;
int duplication(int x){
// Complete this function
vector <int> s;
vector <int> t;
int i=0,j;
int n=0;
s.push_back(n);
while(true){
t.clear();
for(j=0;j<s.size();j++){
int k = 1 - s.at(j);
t.push_back(k);
}
for(j=0;j<s.size();j++){
s.push_back(t[j]);
}
if(s.size()>1000) break;
}
i=s[x];
return i;
}
int main() {
int q;
cin >> q;
for(int a0 = 0; a0 < q; a0++){
int x;
cin >> x;
int result = duplication(x);
cout << result << endl;
}
return 0;
}
答案 0 :(得分:0)
对于第二个循环,我认为它应该是
for(j=0;j<t.size();j++)
另外,i = s [x]应该检查x是否包含s的索引范围。
答案 1 :(得分:0)
你的问题是第二个for循环。
for(j=0;j<s.size();j++){
int k = 1 - s.at(j);
t.push_back(k);
}
for(j=0;j<s.size();j++){ // First iteration size of S is 1, Size of T is 1
s.push_back(t[j]); // Size of s is now 2.
// Loop iteration comes around again j = 1 which is < 2
// t has a size of 1, you are accessing the 2nd index
// which is memory that you do not own.
}
s的大小将在每次迭代时被解析,因为它不断变化,你可以存储一个变量来跟踪s的大小或使用t的大小,但要小心,如果s的大小越来越大,那么并且你存储s的大小你会遇到同样的问题。
在此处阅读分段错误: What is a segmentation fault?