У меня есть 3D-вектор, определенный как это ...Seg вектор вина <вектор <список <Object*>>> push_back
std::vector<std::vector<std::list<Object*> > > m_objectTiles;
У меня есть этот код ...
void ObjectManager::AddObject(Object *object) {
m_objects.push_back(object);
m_objectTypes.insert(std::make_pair(
ObjectAttorney::GetType(object), object));
int x = ObjectAttorney::GetTileX(object);
int y = ObjectAttorney::GetTileY(object);
m_objectTiles[x][y].push_back(object); // SEG FAULT HERE
}
, который получает эту ошибку 0x0805ccdb in std::vector<std::list<Object*, std::allocator<Object*> >, std::allocator<std::list<Object*, std::allocator<Object*> > > >::operator[] (this=0x8157758, object=0x8173f30) at /usr/include/c++/4.4/bits/stl_vector.h:611 { return *(this->_M_impl._M_start + __n); }
Я изменил его на это, чтобы проверить его ...
void ObjectManager::AddObject(Object *object) {
m_objects.push_back(object);
m_objectTypes.insert(std::make_pair(
ObjectAttorney::GetType(object), object));
int x = ObjectAttorney::GetTileX(object);
int y = ObjectAttorney::GetTileY(object);
std::list<Object*> *l = &m_objectTiles[x][y];
if (l) { // SEG FAULT HERE
l->push_back(object);
} else {
std::cout << "List null.\n";
}
}
который просто выдает сообщение об ошибке, говорящее, где ошибка произошла сегментный ObjectManager::AddObject (this=0x81577a0, object=0x8165760) at ObjectManager.cpp:381 if (l) {
Почему ошибка сегментный происходит при проверке нулевого указателя? Очевидно, оператор [] возвращает что-то поврежденное или недействительное. Не знаю, в чем проблема. Любая помощь приветствуется. Благодарю.
В качестве отправной точки вы можете заменить 'std :: vector>>' с несколькими инкапсулирующими классами ... –