一处内存泄漏排查

一处内存泄漏:
稳定性测试抛出了内存泄漏问题,内存在24小时内从150M涨至350M
上测试机排查:
!heap -l
发现大量28字节,18字节左右的小内存泄漏db看一下泄漏内容
这里写图片描述
大量的内存地址指向swmanager\0 这个字符串,代码中搜索swmanager” 发现有10几处使用裸的字符串。
咨询对应的研发RD发现其中关于tips逻辑引用最频繁:
这里写图片描述
该处为在构造函数内的引用,怀疑对象释放有问题,排查对象的相关构造析构函数并断点:
1 e 5f692850 0001 (0001) 0:** BDSWManagerView!TipsWndWorkingData::TipsWndWorkingData
2 e 5f67d4c0 0001 (0001) 0:** BDSWManagerView!TipsWndWorkingData::TipsWndWorkingData
3 e 5f632a80 0001 (0001) 0:** BDSWManagerView!TipsWndWorkingData::~TipsWndWorkingData
4 e 5f632b00 0001 (0001) 0:** BDSWManagerView!TipsWndWorkingData::`scalar deleting destructor’
一处构造函数,一处拷贝构造函数,一处析构函数,一处虚析构函数。
执行相应逻辑:
1号断点命中1次,2号断点命中2次,3好命中2次4号命中1次。
可以确认,析构函数少调用了一次。排查代码后发现,对象被强转为void*,再delete导致无法正确析构。

void TipsWndHandler::HandleMsg(int const MessageCategoryCode, const void* const pRecvData)
{
    TipsWndWorkingData * data = static_cast<TipsWndWorkingData const *>(pRecvData)->clone() ;
    ...
    }
    delete pRecvData ;
    delete data ;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值