使用一个简单的示例,Klocwork 洞察力检测到:
namespace po = boost::program_options;
po::options_description oArgDesc("Options");
oArgDesc.add_options()
("sN", po::value<vector<string>>()->required()->multitoken(), "List of destination names.")
("sV", po::value<vector<string>>()->required()->multitoken(), "List of source names.")
;
Klocwork 消息:内存泄漏。在第 27 行通过函数 'value,std::allocator >,std::allocator,std::allocator > > > > 分配的 'po::value > ()' 中存储的动态内存在第 26 行丢失。还有是第 26 行的一个类似错误。
单步内:value_semantic.hpp,在第 185 行附近(提升 1.54),我看到 new():
typed_value<T>* r = new typed_value<T>(v);
往里看:options_description.hpp,在第 70 行附近,我看到一个空的析构函数
option_description::~option_description()
{
}
在 boost\boost_1_54_0\boost\program_options\detail*hpp 文件中,我没有看到调用删除的明显位置。
到目前为止,我还没有尝试过其他内存分析工具(例如,purify)。