内存泄漏:
稳定性试验将引发内存泄漏问题,记忆力24从小时内150M罗斯350M 调查在测试机上: !heap -l 我们发现了大量的28字节。18db看一下泄漏内容 大量的内存地址指向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(pRecvData)->clone() ; ... } delete pRecvData ; delete data ;}
版权声明:本文博主原创文章。博客,未经同意不得转载。