2014-10-27 21 views
1

編輯(感謝Barry的評論)我需要複製FLANN搜索索引以在向量中使用它們,但是當副本進入範圍時它會產生訪問衝突。該崩潰最小碼爲:flann的析構函數::複製構造函數產生訪問衝突後的索引

#include<flann\flann.hpp> 
#include<vector> 
const int samplesize=10; 
const int dimension=3; 
int main(int argc, char* argv[]) 
{ 
    //fill a pointer to doubles with whatever 
    double * data=new double[samplesize*dimension]; 
     for(int i=0; i<samplesize*dimension; ++i) 
     { 
      data[i]=1; 
     } 
// make a FLANN search index from that data 
flann::Matrix<double> datamat(data,samplesize,dimension); 
flann::Index<flann::L2<double> > ind(datamat, flann::KDTreeIndexParams(4)); 

flann::Index<flann::L2<double> > ind2(ind); 


return 0; 
} 

我將不勝感激,如果有人能告訴我如何制止這種

+0

我不熟悉'flann :: Index',但問題是你有兩個'ind'副本摧毀?如果你用'flann :: Index <...> ind2(ind);'來替換vector,你還會得到雙重刪除嗎? – Barry 2014-10-27 11:24:13

+0

@Barry啊是'flann :: Index > ind2(ind);'確實發生了同樣的錯誤。它也調用std ::〜vector來解釋爲什麼原始代碼會在那裏出現兩次。我將編輯問題 – MatthewJohnHeath 2014-10-27 11:28:38

+0

您可以再次編輯問題以顯示問題是什麼? (哦,標題以及保持一致:)) – JBL 2014-10-27 11:37:45

回答

0

答案似乎是,我只是不應該使用拷貝構造函數的指數,因爲它複製一個指針並且析構函數刪除那個指針(FLANN程序員違反三條規則)。用指針向量(或提高共享指針)解決它似乎做我需要的