【发布时间】:2012-11-06 18:40:22
【问题描述】:
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;
}
任何帮助将不胜感激。我已经研究了好几个小时了,我讨厌不干净的代码……
【问题讨论】:
-
什么是 HS::H5File ?你能显示定义什么是 dsMean.getSpace.getSimpleExtentDims 定义吗?
-
我们需要更多代码。
H5::DataSpace::getSpace()到底是做什么的? -
对不起,我认为这很明显,但显然不是。这些是来自 HDF5 库的 C++ 接口的函数。就是这个:hdfgroup.org/HDF5/doc/cpplus_RM/classH5_1_1DataSet.htmlgetSpace() 返回 DataSpace 的副本,我可以在其中获取数据的维度。
-
也许有类似 releaseSpace...
标签: c++ memory-leaks hdf5