私は、VLFeatからバイナリファイル、特にそのコンポーネントvoid *means
にVlGMM
を書き込み、読み込もうとしています。クラスコードhereが見つかります。バイナリファイルへのvoidポインタの書き込み
これは私が書いた2つの機能である:
:私はこのコード(私は手段が浮動小数点で満たされていることを知っているという通知)を介して、両方の機能でmeans
値を印刷しようとした場合
void writeVlGMM(const std::string &name, VlGMM* gmm){
std::ofstream out(name,std::ios_base::binary);
const void *means = vl_gmm_get_means(gmm); //dimension*numComponents elements
out.write((char *) &means, sizeof(means));
for(int i=0;i<dimension*numComponents;i++)
std::cout<<*((float*)(means)+i)<<" ";
std::cout<<std::endl;
}
void readVlGMM(vl_type dataType, const std::string &name, VlGMM* gmm, vl_size dimension, vl_size numComponents){
std::ifstream in(name, std::ios::binary);
vl_size size = vl_get_type_size(dataType) ;
void *means = vl_calloc (numComponents * dimension, size) ;
in.read((char *) &means, sizeof(means));
}
for(int i=0;i<dimension*numComponents;i++)
std::cout<<*((float*)(means)+i)<<" ";
プリント値は、同じプログラムの実行において同じであるので、私は、作品上記のコードと推測します。とにかく、私はファイルに書いているのはポインタの値で、mean's
という値ではないと思います!上記のコードが異なるプログラムの実行で動作しない可能性はありますか?
gmm
が終了すると、means
となり、保存されたポインタは意味を持たないからです。
これは間違いありませんか?どうすれば問題を解決できますか?
1.(意味を持たない)ことはできませんがvoidポインタを書き、このポインタが指し示すセンスの書き込み内容を持っています。件名が間違っています –
@JacekCz:ファイルに 'void *'を書くのが意味をなさない場合、あなたは正しいです(これがデバッグ/トレースファイルでない限り)。どうやらOPはファイルに 'float'を書き込もうとしますが、それでもまだ明確ではありません。 – Olaf
ルックアップ_de-/serialization_ –