矢量迭代器不兼容

时间:2010-12-08 03:21:50

标签: c++ vector iterator runtime-error

我有一些课我想要使用大量的载体。

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]错误消息。如果向量为空,则可以正常工作。

我已经读过由无效迭代器生成的错误消息,但是,因为此时我没有对向量进行任何更改,所以我不会在这里得到错误。

1 个答案:

答案 0 :(得分:4)

你几乎肯定不想动态分配矢量;只需将其作为班级成员包括在内:

class Bar { 
    std::vector<Foo> _grid;
};

如果你真的想动态分配矢量,你想使用构造矢量的new。正如现在所写的那样,向量为malloc空间,并将向量占用的所有字节设置为零。您永远不会为已分配的对象调用std::vector构造函数,因此您不能将其用作std::vector

确保您有a good introductory C++ book从中学习该语言。如果您不理解C ++内存模型和对象模型,那么现在您可以编写正确的C ++代码。