簡単な例を使用すると、Klocwork Insight は以下を検出します。
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行目の同様のエラーの1つです。
内部のシングルステップ: 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 など) もまだ試していません。