gpt4 book ai didi

在 vector 中使用删除的 C++ 段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:36 26 4
gpt4 key购买 nike

我在我的代码中遇到段错误,我想知道为什么。我正在猜测它与 vector.erase() 函数有关。

#include <iostream>
#include <vector>
#include <math.h>

long long gcd(long long x, long long y);
std::vector<long long> factor(long long x);
typedef std::vector<long long> vectorNum;

int main(int argc, const char * argv[])
{

// insert code here...
long long unFriendly;
long long friendly;
long long counter = 0;
std::cin >> unFriendly;
std::cin >> friendly;
vectorNum n;
n = factor(friendly);

for(long long x = 0;x < unFriendly;x++){
long long num = 0;

std::cin >> num;
counter = gcd(friendly, num);
for(long long y = n.size() - 1;y >= 0;y--){
vectorNum temp(n);
if(counter % n.at(y) == 0){
n.erase(n.begin() + y);
}
}
}

std::cout<<n.size();
n.clear();

}

long long gcd(long long x, long long y){
while(y != 0){
long long a = x % y;
x = y;
y = a;
}
return x;
}

std::vector<long long> factor(long long x){
long long y;
long long root = sqrt(x);
std::vector<long long> vectorSet;
for(y = 2; y <= root;y++){
if(x % y == 0){
vectorSet.push_back(y);
vectorSet.push_back(x / y);

}
}
vectorSet.push_back(x);
return vectorSet;
}

任何类型的见解都是完美的!提前致谢。这是被调用的两个函数。 gcd()factors() 均按要求运行。

最佳答案

for(long long x = 0;x < unFriendly;x++){
long long num = 0;

std::cin >> num;
counter = gcd(friendly, num);
for(long long y = n.size() - 1;y >= 0;y--) { // <-- n.size() == 0, 0U - 1 is huge
vectorNum temp(n);
if(counter % n.at(y) == 0){ // <-- y is huge, throws std::out_of_range
n.erase(n.begin() + y);
}
}
}

我强烈建议在调试器下运行您的代码。运行代码时,Visual Studio 调试器很快显示:

enter image description here

关于在 vector 中使用删除的 C++ 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com