【发布时间】:2017-05-15 13:30:28
【问题描述】:
为什么我在以下代码中遇到分段错误? 此代码以第一个元素为 0 的数组 s 开始。然后是元素与 s 互补的数组 t,然后将 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;
}
【问题讨论】:
-
你的第二个 forloop 不应该检查 t 的大小而不是 s 吗?
-
您遇到了段错误,因为您不知道如何使用调试器一次一行地单步执行您的代码,以便检查所有变量的内容,并检查您的程序执行时的逻辑,以便识别错误并自行修复。这就是为什么您仍然遇到段错误。
-
你的第二个
for循环是错误的。您在检查size的同时添加到s,并且当您在循环主体中添加到s时,for循环将永远不会退出。 -
传入任何 x > 1000 的值也有可能发生分段,
标签: c++ vector segmentation-fault