ライブラリHDF5を使用してバイナリで保存しています。クラスの静的メンバーとしてH5 :: CompTypeを初期化する
ユーザー定義の「グローバル」データ型を最初から初期化し、必要に応じて使用したいと考えています。
たとえば、 "ベクトル"(コンポーネントが2つの倍精度:x、y)の複合型を定義したいとします。
私は(私は基本的にこの回答から取ったこと: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は、オブジェクトが解放されていないことを示していません。しかし、間違いなくデストラクタを追加する必要があります。 –