pac->SetBdRegisterCallBack(std::bind(&AC::Callback,
                this, std::placeholders::_1));

运行这行代码报此错误,因有返回值的函数结束时没有写 return 语句导致。排查了很久才发现,加上 return 语句问题解决。

int32_t AC::SetBdRegisterCallBack(CallBack&& _Cb {

    m_ac->BdRegisterCallBack(std::forward<CallBack>(_Cb));

    return 0;

}

int32_t BD::BdRegisterCallBack(CallBack&& _Cb) {

    m_bd->RegisterCallBack(std::forward<CallBack>(_Cb));

    return 0;

}

int32_t EG::RegisterCallBack(CallBack&& _Cb) {

    m_eg->PnRegisterCallBack(std::forward<CallBack>(_Cb));

    return XAG_SUCCESS;

}

int32_t PE::PnRegisterCallBack(CallBack&& _Cb){

    CallBack = std::forward<CallBack>(_Cb);

    return 0;

}

设置回调函数一层一层封装时大意忘了写 return,就发生了 double free detected in tcache 2 错误,导致程序跑飞。良好的编程习惯,很重要。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐