векторные итераторы несовместимы - PullRequest
1 голос
/ 08 декабря 2010

У меня есть класс, в котором я хочу использовать большое количество векторов.

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 Ответ

4 голосов
/ 08 декабря 2010

Вы почти наверняка не хотите динамически распределять вектор; просто включите его в класс:

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

Если вы действительно хотите динамически выделить вектор, вы должны использовать new, который создает вектор. Как написано сейчас, вы malloc оставляете место для вектора и устанавливаете все байты, занятые вектором, в ноль. Вы никогда не вызываете конструктор std::vector для выделенного объекта, поэтому вы не можете использовать его как std::vector.

Убедитесь, что у вас есть хорошая вводная книга C ++ для изучения языка. Если вы не понимаете модель памяти C ++ и объектную модель, теперь вы сможете написать правильный код C ++.

...