在C++中使用矢量时出现分割错误?



为什么在以下代码中出现分段错误? 此代码以第一个元素为 0 的数组 s 开头。然后,一个数组 t,其元素是 s 的补充,然后将 t 附加到 s,直到大小大于 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;
}

对于第二个循环,我相信应该是

for(j=0;j<t.size();j++)

另外,i=s[x]应该检查x是否与s的索引边界有关。

您的问题是第二个 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 的大小比 t 更大,并且您正在存储 s 的大小,您将遇到同样的问题。

在此处阅读分段错误: 什么是分段错误?

相关内容

  • 没有找到相关文章