У меня есть следующий фрагмент кода и простой оператор if: if (voxels_)
, где voxels_ должен быть NULL, не работает. Код:член класса не инициализируется
template<class T, typename REAL = float>
class NDIMVoxelStructure
{
public:
inline NDIMVoxelStructure(): voxels_(NULL){}
inline virtual ~NDIMVoxelStructure(){ this->clear();}
/////////////////ERROR occurs at if(voxels_) //////////////////
inline void
clear(){if (voxels_){delete[] voxels_; voxels_ = NULL;}}
inline void
build (const std::vector<REAL> bounds, std::vector<int> num_of_voxels) {
this->clear();
// more code
}
protected:
T* voxels_;
};
Class ModelLibrary {
ModelLibrary() {
hash_table_.build (bounds_vector, num_of_cells_vector);
}
struct Quad{
const ORROctree::Node::Data* first;
const ORROctree::Node::Data* second;
const float* f1;
const float* f2;
};
typedef std::list<Quad > quad_list;
// these two types hide base class types
typedef std::map<const Model*, quad_list> HashTableCell;
typedef NDIMVoxelStructure<HashTableCell, float> HashTable;
protected:
HashTable hash_table;
};
int main() {
ModelLibrary library;
}
Я получаю segfault в методе clear(). Используя gdb, я получил адрес voxels_
, который установлен в 0xa
, что странно. Я инициализирую его NULL, поэтому if (voxels_)
должен просто вернуть false. Любые идеи были бы полезны. Это сводит меня с ума
Вы пытаетесь получить доступ к объекту NDIMVoxelStructure, удаленному aleady, возможно, в некотором коде, который вы не указали. –
Прочтите это: [C++: правило трех] (http://en.wikipedia.org/wiki/Rule_of_three_ (программирование на C++ _)) – WhozCraig
Этот вопрос требует минимального жизнеспособного примера для ответа. Ваш пример скомпилировал и произвел ошибку? – JimR