2012-11-18 3 views
-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; 
} 

어떤 도움을 주시면 감사하겠습니다. 나는 이것을 몇 시간 동안 해왔다. 나는 더러운 코드를 싫어한다. ...

+0

HS :: H5File이란 무엇입니까? dsMean.getSpace.getSimpleExtentDims 정의 란 무엇입니까? – dchhetri

+0

더 많은 코드가 필요합니다. 'H5 :: DataSpace :: getSpace()'는 실제로 무엇을합니까? – Synxis

+0

죄송합니다. 분명하지만 분명히 그렇지 않다고 생각했습니다. 그것들은 HDF5 라이브러리의 C++ 인터페이스의 함수입니다. 이 것은 다음과 같습니다. http://www.hdfgroup.org/HDF5/doc/cpplus_RM/classH5_1_1DataSet.html getSpace()는 데이터 크기를 얻을 수있는 DataSpace 사본을 반환합니다. – Ela782

답변

0

사용을 마치면 H5::DataSet::vlenReclaim을 사용하여 메모리를 회수한다.

+0

흠, 지금 이걸 보았습니다. 나는 정말로 이해하지 못한다고 말해야합니다. 내가 발견 할 수있는 유일한 것은 원격지에서 http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/c++/test/tvlstr.cpp 이었지만 지금은 무슨 일이 일어나고 어떻게 사용하는지 생각 해왔다. 내 훨씬 간단한 코드. – Ela782

+0

나는이 문제를 해결하거나 예제를 이해하지 못했습니다. 추가 도움이 내 편에서 매우 환영받을 것입니다. – Ela782

0

가변 길이 교정은 가변 길이 데이터 유형을 사용하는 경우에만 적용됩니다.이 예제에서는이 예제에 포함되지 않을 것으로 생각됩니다. 데이터 공간 사용을 마친 후에는 데이터 공간을 닫아야한다고 생각합니다.