У меня есть класс, который содержит вектор указателей на класс. В большинстве своих функций-членов я могу получить доступ и изменить вектор просто отлично. Однако в одной функции даже вызов .size() или получение итератора вызывает segfault в моей программе.Вектор указателей segfault при вызове size() и при создании итератора
Вот класс с вектором указателей на класс:
class floor
{
public:
floor(string imageFile, string a_walkwayFile, string waypointFile, int a_id, sf::Vector2i a_pos);
~floor();
int getId() { return id; };
void update(sf::RenderWindow* App);
sf::Sprite* getSprite() { return sprite; };
vector<int> parseCSVLine(string line);
void loadWalkways();
void convertToView(sf::RenderWindow* App, sf::View* view);
bool pointInWalkway(sf::Vector2f pt);
private:
vector<sf::RectangleShape*> walkWays;
sf::Sprite* sprite;
int id;
float scale;
string walkwayFile;
};
Здесь объекты добавляются к вектору сниппет Whee:
walkWays.push_back(new sf::RectangleShape());
walkWays[walkWays.size() - 1]->setPosition(sf::Vector2f(parsedLine[0], parsedLine[1]));
walkWays[walkWays.size() - 1]->setSize(sf::Vector2f(parsedLine[2] - parsedLine[0], parsedLine[3] - parsedLine[1]));
walkWays[walkWays.size() - 1]->setFillColor(sf::Color(0,0,255,25));
walkWays[walkWays.size() - 1]->setOutlineColor(sf::Color::Blue);
walkWays[walkWays.size() - 1]->setOutlineThickness(3);
Вот фрагмент кода, который всегда получает доступ к вектору только хорошо:
void floor::update(sf::RenderWindow* App)
{
App->draw(*sprite);
for(int i = 0; i < walkWays.size(); ++i)
App->draw(*walkWays[i]);
}
Теперь вот функция, в которой каждый звонок или ссылка ENCE результатам функции в Segfault:
bool floor::pointInWalkway(sf::Vector2f pt)
{
cout << walkWays.size() << endl; // this segfaults
if(walkWays.size() != 0) // this segfaults
for(vector<sf::RectangleShape*>::iterator it = walkWays.begin(); it != walkWays.end(); ++it) // this segfaults too!
if((*it)->getGlobalBounds().contains(pt.x, pt.y))
return true;
return false;
}
Любые указатели о том, как я бы исправить это было бы весьма признателен!
Вы пробовали использовать gdb? или какой-либо отладчик в программе? –
Я использовал код: блокирует отладчик, поэтому я знаю, где он сбой. Кроме того, неисправная функция называется ПОСЛЕ того, что все объекты добавляются к вектору, если это помогает. – lfnunley
вы могли бы разместить весь свой код, чтобы, возможно, вставить bin? по крайней мере, относящийся к объекту, я не могу найти проблему с вашим текущим кодом. –