我得到一个错误-> 访问地址0x00007ff8bf611980(_ZNSt10_weakptrIN10prometheus11CollectableELN9_gnu_cxx12_Lock_policyE2EEC1ERKS4_ + 0x1b)时出现分段错误[0x7fff8bee28215]
我的代码位于- 另外,我确信错误的根源是“ ex-> register(registry);”行(注释为有问题的行),因为当我评论该错误时,不会发生。
void Family::MakeGauge3(std::string s1, std::string s2, const
std::map<string,string>& labels, MyExposer* ex)
{ auto registry = make_shared<prometheus::Registry>();
gauge_family= &(prometheus::BuildGauge().Name(s1).Help(s2).
Labels(labels).Register(*registry));
ex->register(registry); //problematic line
}
MyExposer类中的register函数是->
void MyExposer::register(std::shared_ptr<prometheus::Registry> reg)
{
exp ->RegisterCollectable(reg);
}
exp是MyExposer类的私有成员,定义为->
Exposer * exp; // Exposer是另一个类
类注册表也从我的名为Collectable的类中公开继承。
void Exposer::RegisterCollectable(const
std::weak_ptr<prometheus::Collectable>&
collectable)
{ collectables_.push_back(collectable);
}
其中collectable_是Exposer类中定义为->
的私有成员std::vector<std::weak_ptr<prometheus::Collectable>> collectables_;