Ошибка во время выполнения:Нарушение доступа при использовании .push_back() с std::vector?

StackOverflow https://stackoverflow.com/questions/1804148

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть вектор, определенный 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() должна завершаться сбоем только в том случае, если у вас не хватает памяти или вы пытаетесь использовать не копируемый или не назначаемый объект в векторе, и то не из-за нарушения доступа.

Ваш вектор был поврежден.Я бы предложил поместить точку наблюдения за данными на его внутренние компоненты, чтобы увидеть, что на нем происходит (в отладчике).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top