Visual Studio показывает несколько утечек (несколько сотен строк), в общей сложности более нескольких МБ. Я проследил это до следующего «примера 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;
}
Любая помощь будет оценена. Я занимаюсь этим часами, ненавижу нечистый код …
использование H5 :: DataSet :: vlenReclaim восстановить память после того, как вы закончили с его использованием.
Восстановление с переменной длиной применимо только в том случае, если вы используете типы данных переменной длины, что, я думаю, не будет в этом примере. Я думаю, что вам просто нужно закрыть пространство данных после того, как вы его используете.