라이브러리 HDF5를 사용하여 바이너리로 저장하고 있습니다.H5 :: CompType을 클래스의 정적 멤버로 초기화하십시오.
사용자 정의 된 "전역"데이터 형식을 갖고 싶습니다. 처음에 초기화 한 다음 필요할 때 사용할 수 있습니다.
예를 들어 "Vector"(두 개의 구성 요소가 x, y 인 구성 요소 인 경우)의 복합 유형을 정의하려고합니다.
나는 (I 기본적으로이 대답에서 걸렸다 : https://stackoverflow.com/a/27088552/4746978) 다음과 같은 방법이 아이디어를 구현하려고// inside Vector.h
struct Vector
{
double x;
double y;
}
// inside Hdf5types.h
#include "Vector.h"
class Hdf5types
{
private:
static H5::CompType m_vectorType;
public:
static const H5::CompType& getVectorType();
};
//inside Hdf5types.cpp
#include "Hdf5types.h"
H5::CompType Hdf5types::m_vectorType = Hdf5types::getVectorType();
const H5::CompType& Hdf5types::getVectorType()
{
struct Initializer {
Initializer() {
m_vectorType = H5::CompType(sizeof(Vector));
m_vectorType.insertMember("x", HOFFSET(Vector, x), H5::PredType::NATIVE_DOUBLE);
m_vectorType.insertMember("y", HOFFSET(Vector, y), H5::PredType::NATIVE_DOUBLE);
}
};
static Initializer ListInitializationGuard;
return m_vectorType;
}
코드는 컴파일을하지만 예외가 발생합니다 나는 런타임에 문제를 얻을 :
을예외가 발생했습니다. 읽기 액세스 위반입니다.
this-> nullptr입니다.
"this"는 HDF5 라이브러리에서 "IdComponent"라고하는 개체를 나타냅니다. 라이브러리를 파고 들어갈 시간이 없기 때문에 진행 방법을 모르겠습니다. 아마 HDF5를 아는 사람이 해결책을 가지고있을 것입니다!
감사합니다. 그게 내 문제를 해결 했어! 할당 된 메모리를 해제해야겠습니까? 소멸자에서 작업을 수행하면 Hdf5 객체가 생성되지 않기 때문에 확실하지 않습니다. 어떻게 생각해? – Turms
valgrind가 개체가 해제되지 않았 음을 알 수 없습니다. 하지만 가장 확실하게 소멸자를 추가해야합니다. –