c++ free(): double free detected in tcache 2

    pInter->SetHdRegisterEndTakePhotoCb(std::bind(&FpvAerialMappingCtrlModule_Impl::CameraDeviceResultCb,
                this, std::placeholders::_1));

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

int32_t FpvInterfaceModule_Impl::SetHdRegisterEndTakePhotoCb(EndTakePhotoCb&& _ptrCall {

    m_ptrHwPro->HdRegisterEndTakePhotoCb(std::forward<EndTakePhotoCb>(_ptrCall));

    return 0;

}

int32_t HardwareProcess::HdRegisterEndTakePhotoCb(EndTakePhotoCb&& _ptrCall) {

    m_ptrMng->RegisterEndTakePhotoCb(std::forward<EndTakePhotoCb>(_ptrCall));

    return 0;

}

int32_t HardwareMng::RegisterEndTakePhotoCb(EndTakePhotoCb&& _ptrCall) {

    m_pPhotoSnap->PnRegisterEndTakePhotoCb(std::forward<EndTakePhotoCb>(_ptrCall));

    return XAG_SUCCESS;

}

int32_t PhotoSnap_Impl::PnRegisterEndTakePhotoCb(EndTakePhotoCb&& _ptrCall){

    endTakephotoCb = std::forward<EndTakePhotoCb>(_ptrCall);

    return 0;

}

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

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值