Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > vector и TBitmap


Автор: DissDoc 26.8.2007, 22:41
Пытаюсь сделать динамический массив из TBitmap.
Ну и сделал вот так
Код

vector <Graphics::TBitmap *> m_vListBmp;
// Сюда вставляю свой битмап
m_vListBmp.push_back(mybmp);
// Далее пытаюсь просто вызвать
ShowMessage(m_vListBmp[0]->Width);


В результате чего программа вылетает с ошибкой access violetion =\ В чем я неправ?

Автор: Lazin 26.8.2007, 23:02
Ошибка доступа, либо вектор пустой, либо битмап был удалён где-то в другом месте, а указатель на него остался

Автор: JackYF 26.8.2007, 23:38
Цитата(Lazin @  26.8.2007,  23:02 Найти цитируемый пост)
либо вектор пустой

по коду непустой


Цитата(Lazin @  26.8.2007,  23:02 Найти цитируемый пост)
либо битмап был удалён где-то в другом месте, а указатель на него остался 

или просто не был создан

Автор: DissDoc 27.8.2007, 14:59
Я так покопал, тут дело не в этом, ИМХО
без разницы у какого битмапа это делать, но если брать высоту или ширину например, прога всегда вылетает с ошибкой Access Violetion.
Даже так Image->Canvas->Brush->Bitmap->Width... Но ширина в этом классе есть.. или я что-то недопонимаю  smile 

Автор: Lazin 27.8.2007, 16:08
AV - может вылетать только по 2м причинам, либо в контейнер вставлен изначально битый указатель, либо вставлен нормальный, но позже объект был удалён, а указатель в контейнере остался.
пример
Код

std::vector<Graphics::TBitmap*> bmp_array;
for (int i=0; i < 10; ++i)
{
  Graphics::TBitmap* bmp = new Graphics::TBitmap();
  bmp_array.push_back(bmp);
  //delete bmp;-если раскоментировать то будет AV
}

bmp_array[0]->Width = 10;


Добавлено через 2 минуты и 24 секунды
при копировании в контейнер происходит только копирования указателя, сам битмап не копируеца

Автор: DissDoc 27.8.2007, 16:15
Да у меня так же..
Но я решил проблему проще ;)
Я просто вектор HRGN завел и туда регионы пихаю ))
Не могу  с T*** справиться не один класс нормально не заработал в моих руках =)

Автор: Lazin 27.8.2007, 16:19
DissDoc, это что-то чисто твоё, у меня этот код нормально работает.

Автор: DissDoc 27.8.2007, 20:17
 Да! Я нашел свою ошибку. Нужно брать битмап от картинки, а не от кисти!
Нужно вот так
Код

Image->Picture->Bitmap

А не так
Код

Image->Canvas->Brush->Bitmap

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)