【发布时间】:2021-10-07 10:29:36
【问题描述】:
情况有点复杂,但我会尽量解释清楚。
我正在尝试从对象指针向量中获取指向对象的指针,其中对象的属性之一与变量字符串匹配。为此,我将字符串变量绑定到一个函数,然后使用绑定函数尝试找到该对象指针。但是,每当我尝试此操作时,它都会崩溃。我已经尝试了一堆不同的测试来找到问题,但我仍然一无所知。以下是相关代码:
class A {
std::string n;
...
public:
const std::string getN() {
return n
}
};
static bool checkN(std::string n1, A* a) {
if (a->getN() == n1) {
return true;
}
else {
return false;
}
}
void function() {
using namespace std::placeholders;
A* a;
std::string compare = "Yes";
const std::vector<A*> As; //As[0].n = "Yes";
auto check = std::bind(checkN, compare, _1);
a = (*std::find_if(As.begin(), As.end() - 1, check)); //This is the line where it crashes.
}
请注意,这是一个简化版本,但我认为它明白了这一点。有什么建议? 编辑:在尝试简化代码时出现了一些语法错误。修复它们。
【问题讨论】:
-
我建议首先使用地址清理程序进行编译。但是,相关代码对我们来说几乎没有 minimal reproducible example 有用,尤其是在崩溃时,问题很容易出现在看起来无关紧要的地方。
-
崩溃时变量的值是多少?是什么让您认为
As.end() - 1有效?甚至有用——你是否试图忽略最后一个元素? -
您的代码没有显示您将任何内容放入向量中...这是一个工作示例:onlinegdb.com/KziZkSl7y 主要担心的是您的代码仅在向量实际包含匹配项时才有效item - 如果不是,您取消引用结束迭代器,即 UB。以下是处理这种情况的示例:onlinegdb.com/WAPHS5Dxl
标签: c++ algorithm vector c++17 bind