Solaris で実行するコードで purify を実行すると、大量のメモリ リークが発生します。しかし、コードを確認したところ、ほとんどのリークは無効のようです。
たとえば、
File1.cpp
Obj* getMyObj()
{
Obj* obj = NULL;
if(condition)
{
obj = new Obj(); //Purify is reporting leak here
//Fill obj
}
...
return obj;
}
File2.cpp
void myfunc()
{
Obj* myobj = getMyObj();
if(myobj == NULL)
return;
...
...
delete myobj; //The object is deleted here
}
でオブジェクトが適切に破棄されているのにFile2.cpp
、なぜ で浄化レポートがリークするのFile1.cpp
ですか?
編集
NULL チェックは単なるタイプミスでした。修正しました。