2014-10-27 5 views
1

EDIT (спасибо Barry в комментариях) Мне нужно скопировать индексы поиска FLANN, чтобы использовать их в векторе, но он создает нарушение прав доступа, когда количество копий изменяется. Минимальный код, который врезается является:Destructor of flann :: Index after copy constructor производит нарушение прав доступа

#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' get уничтожены? Если вы замените вектор только 'flann :: Index <...> ind2 (ind);', вы все равно получите двойное удаление? – Barry

+0

@Barry ah yes 'flann :: Index > ind2 (ind);' делает ту же ошибку. Также он вызывает std :: ~ vector, который объясняет, почему исходный код шел туда дважды. Я отредактирую вопрос – MatthewJohnHeath

+0

Не могли бы вы снова изменить вопрос, чтобы показать, что проблема _now_? (О, и название, чтобы сохранить его связным :)) – JBL

ответ

0

Ответ, кажется, что я просто не должен использовать конструктор копирования для индекса из-за копирует указатель, а деструктор удаляет этот указатель (программисты FLANN нарушают правило из трех). Работать вокруг него с вектором указателей (или увеличить общие указатели), похоже, делает то, что мне нужно

 Смежные вопросы

  • Нет связанных вопросов^_^