我有一些课我想要使用大量的载体。
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]
错误消息。如果向量为空,则可以正常工作。
我已经读过由无效迭代器生成的错误消息,但是,因为此时我没有对向量进行任何更改,所以我不会在这里得到错误。
答案 0 :(得分:4)
你几乎肯定不想动态分配矢量;只需将其作为班级成员包括在内:
class Bar {
std::vector<Foo> _grid;
};
如果你真的想动态分配矢量,你想使用构造矢量的new
。正如现在所写的那样,向量为malloc
空间,并将向量占用的所有字节设置为零。您永远不会为已分配的对象调用std::vector
构造函数,因此您不能将其用作std::vector
。
确保您有a good introductory C++ book从中学习该语言。如果您不理解C ++内存模型和对象模型,那么现在您可以编写正确的C ++代码。