我試圖從VLFeat寫入和讀取VlGMM
二進制文件,特別是其組件void *means
。您可以找到課程代碼here。寫入void指針到二進制文件
這是我已經寫了2個功能:
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));
}
如果我試圖通過這個代碼(請注意,我知道這意味着充滿浮動點)打印在這兩個函數means
值:
for(int i=0;i<dimension*numComponents;i++)
std::cout<<*((float*)(means)+i)<<" ";
印刷值是在相同的程序執行相同,所以我想上述作品的代碼。無論如何,我認爲我在文件中寫的是指針值,而不是自己的值!上面的代碼在不同的程序執行中有可能不起作用嗎?
這是因爲程序執行終止時gmm
被解除分配等means
,並且保存的指針沒有意義。
這是正確的嗎?我該如何解決這個問題?
1.不能(沒有道理)寫空指針,具有由該指針指向意義上寫的內容。主題錯誤 –
@JacekCz:如果你的意思是寫'void *'到一個文件沒有意義,你是正確的(除非這是一個調試/跟蹤文件)。顯然OP會嘗試寫一個'float'到文件中,但這仍然不清楚。 – Olaf
查找_de-/serialization_ –