Ошибка во время выполнения:Нарушение доступа при использовании .push_back() с std::vector?
Вопрос
У меня есть вектор, определенный std::vector<LPDIRECT3DTEXTURE9> textures;
Позже я прохожу мимо LPDIRECT3DTEXTURE9
возражайте против этого, вот так textures.push_back(texture);
Вот пример этого:
void SpriteManager::AddSprite(float x, float y, float z, LPDIRECT3DTEXTURE9 texture)
{
//snip
textures.push_back(texture);
//snip
}
Это вызывает ошибку времени выполнения.Это нарушение в векторном классе на size()
функция.Почему это могло произойти?
Редактировать:
Я также сталкиваюсь с идентичной проблемой, выполняя ту же операцию над вектором D3DXVECTOR3
Объекты.С тех пор как LPDIRECT3DTEXTURE9
является указателем на IDIRECT3DTEXTURE9
, должен ли я использовать это вместо этого?
Решение
Безусловно, наиболее распространенной причиной является то, что у вас на самом деле нет вектора.В данном случае, textures
по-видимому, является членом SpriteManager
класс.Итак, это говорит о том, что у вас на самом деле нет SpriteManager
возражать тоже нельзя.Является ли this
указатель действителен?
Другие советы
Ну, поскольку LPDIRECT3DTEXTURE9 по своему венгерскому названию является указателем, а не объектом (как вы к нему относитесь), я предполагаю, что вы передаете недопустимые указатели, которые уже выполнили фанданго на вашем плохом векторном объекте перед вызовом push_back().
Возможно, я ошибаюсь, но это все, что можно сказать из предоставленной вами информации.И, да, функция push_back() должна завершаться сбоем только в том случае, если у вас не хватает памяти или вы пытаетесь использовать не копируемый или не назначаемый объект в векторе, и то не из-за нарушения доступа.
Ваш вектор был поврежден.Я бы предложил поместить точку наблюдения за данными на его внутренние компоненты, чтобы увидеть, что на нем происходит (в отладчике).