使用智能指针时出现分段错误

时间:2019-07-14 10:08:50

标签: c++11 memory-management memory-leaks smart-pointers

我得到一个错误-> 访问地址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_;

0 个答案:

没有答案