-1

Visual Studio では、いくつかのリーク (数百行) が表示され、合計で数 MB を超えています。次の「helloWorldの例」までたどりました。H5::DataSet.getSpace() 行をコメントアウトすると、リークはなくなります。

#include "stdafx.h"
#include <iostream>
#include "cpp/H5Cpp.h"

int main(int argc, char *argv[])
{
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); // dump leaks at return

H5::H5File myfile;
try {
    myfile = H5::H5File("C:\\Users\\yyy\\myfile.h5", H5F_ACC_RDONLY);
}
catch (H5::Exception& e) {
    std::string msg( std::string( "Could not open HDF5 file.\n" ) + e.getCDetailMsg() );
    throw msg;
}

H5::Group myGroup = myfile.openGroup("/so/me/group");
H5::DataSet myDS = myGroup.openDataSet("./myfloatvec");
hsize_t dims[1];
//myDS.getSpace().getSimpleExtentDims(dims, NULL); // <-- here's the leak

H5::DataSpace dsp = myDS.getSpace(); // The H5::DataSpace seems to leak
dsp.getSimpleExtentDims(dims, NULL);
//dsp.close(); // <-- doesn't help either

std::cout << "Dims: " << dims[0] << std::endl; // <-- Works as expected

return 0;
}

どんな助けでも大歓迎です。私はこれに何時間も取り組んできましたが、汚れたコードは嫌いです...

4

2 に答える 2

0

可変長の再利用は、可変長のデータ型を使用している場合にのみ適用されますが、この例ではそうではないと思います。使い終わったら、データスペースを閉じるだけでいいと思います。

于 2013-07-02T23:01:54.743 に答える
0

H5::DataSet::vlenReclaimを使用して、メモリの使用が終わったらメモリを再利用します。

于 2012-11-18T19:44:40.207 に答える