xxxx.h ファイル:
struct dn_instance_pair
{
std::string theDn;
int theInstance;
};
typedef struct dn_instance_pair t_dn_inst_pair;
struct table_rowid_type
{
char theTable[101];
sqlite3_int64 theRowid;
int operation;
};
// static class members
static vector<t_dn_inst_pair> dninstList;
static vector<t_table_rowid_type> tablerowidList;
xxxx.cpp で
// declaration of vectors.
// Included to this post only for completeness.
vector<t_dn_inst_pair> xxxx::dninstList;
vector<t_table_rowid_type> xxxx::tablerowidList;
これらのベクトルは静的コールバック関数で処理されるため、それらも静的である必要があります。
cpputest で、これらのベクトルのいずれかに何かを追加しようとすると、失敗が発生します。
Leak size: 8 Allocated at: <unknown> and line: 0. Type: "new" Content: "<\ufffdP@"
ベクトルに追加されるものは自動変数であり、通常の関数で発生します。
t_dn_inst_pair thePair;
thePair.theDn = updated_dn;
thePair.theInstance = updated_instance;
ベクトルは、テスト ケースの最後にクリアされます。
xxxx::yyyy()->dninstList.clear();
(yyyy() はシングルトン xxxx オブジェクトへのポインタを返します)
ページhttp://blog.objectmentor.com/articles/2010/02/04/cpputest-recent-experiences では、同じ種類のメモリ リークについて説明しています。
「これは誤検知です。これは 1 回限りの割り当てであり、C++ メモリ割り当てと静的初期化の副作用です。」
私の質問は次のとおりです。この失敗は本当に偽陽性ですか?
br エスコ