У меня есть класс, в котором я хочу использовать большое количество векторов.
class Bar {
Bar ();
std::vector<Foo> * _grid;
void someFunction ();
}
Bar::Bar () {
_grid = (std::vector<Foo> *)malloc(_gridSize * sizeof(std::vector<Foo>);
memset(_grid, 0, _gridSize * sizeof(std::vector<Foo>);
}
void Bar::someFunction () {
int index = 0;
std::vector<Foo> someVariable = _grid[index];
}
Однако, как только я вызываю someFunction()
, я получаю сообщение об ошибке vector iterators incompatible
, как только в _grid[index]
есть какой-то контент. Если вектор пустой, он работает.
Я читал о сообщении об ошибке, создаваемом недействительными итераторами, однако, поскольку я ничего не меняю в векторах на данный момент, я не понимаю, что здесь не так.
malloc
? Ваш вектор не строится! - person Fred Larson   schedule 08.12.2010memset
просто произошло сделать что-то достаточно близкое к тому, что нужно для вашей конкретной реализации std::vector, чтобы обмануть ваш отладчик. Пожалуйста, никогда не используйте эту функцию в C++. Даже если вы просто хотите обнулить массив изchar
с. В современном C++ нужная вам функциональность пишется какstd::fill
и живет в<algorithm>
. Хотя это для общего случая; вы можете вызывать конструкторы, просто используя конструктор для вектора векторов или его функцию-член.resize()
. - person Karl Knechtel   schedule 08.12.2010Foo
у вас есть для начала в каждом векторе? Вы хотите, чтобы хранилище оставалось прямоугольным, т.е. каждый вектор имел одинаковую длину? Что вы на самом деле пытаетесь сделать? - person Karl Knechtel   schedule 08.12.2010