命令在向量输入后立即终止

时间:2021-05-05 07:17:49

标签: c++ vector

我创建了这个程序:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    int n;
    cin>>n;
    vector<int> m(n);
    for(int i=0;i<n;i++){
        cin>>m[i];
    }
    
    sort(m.begin(),m.end());

    vector<bool> used(n,false);
    for(int i=n;i>0;i--){
        for(int j=i;j>0;j--){
            if((m[i]/m[j]>=2)&&(used[i]==false))
                used[j]=true;
        }
    }

    int numOfElem=0;
    for(int i=0;i<n;i++){
        if(used[i]!=true){
            numOfElem++;
        }
    }
    cout<<"\n"<<numOfElem<<"\n";

    return 0;
}

现在由于某种原因,在我输入向量 m 的元素后,我的命令终止了,有没有人知道这个问题的原因?

1 个答案:

答案 0 :(得分:2)

自从您开始使用 m(向量的大小)进行迭代以来,您越界访问了向量 usedi == n。这会导致您的程序出现未定义行为,而崩溃是一种可能的结果。

建议修复:

for(int i = n - 1; i >= 0; i--) { // start with n-1 and ...
    for(int j = i; j >= 0; j--) { // ... include 0 in the loop

另请注意,m[i] / m[j] 可能是被零除并抛出异常,因此您可能需要在除法之前检查 m[j] == 0 是否也如此。