• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Коллекция коллекций

  • Автор темы DenskiY
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

DenskiY

Добрый вечер, участники конференции.
Создаю SDI приложение, использую в нем коллекцию CTypedPtrArray<CObArray, CFigure*> m_FigArray.
В коллекцию записываются геометрические фигуры. Поставлена задача создать коллекцию, в которой будут храниться кадры. (На каждом кадре могут быть свои фигуры) Я вижу ее так:
Код:
typedef CTypedPtrArray<CObArray, CFigure*> CFigArray;
CTypedPtrArray<CObArray, CFigArray*> m_FrameArr;
CFigArray m_FrameArr;

Добавление организую так:
Код:
m_FrameArr.Add(&m_FigArray);

Код:
CFigArray *temp=(CFigArray *)m_FrameArr[0];
CFigure*f;
m_FigArray.RemoveAll();
for (int j=0;j<temp->GetSize();j++)
{
f=(CFigure*)temp->GetAt(j);
m_FigArray.Add(f);
}
В чем может быть ошибка? Можно ли по-другому записать в m_FigArray m_FrameArr[0]?
Спасибо за внимание и ответы.
 
G

grigsoft

У тебя m_FrameArr хранит указатели - т.е. копии объектов не создаются. Так что temp==&m_FigArray. Когда ты говоришь m_FigArray.RemoveAll(); temp тоже становится пустой.
 
D

DenskiY

Суть задачи - поработал с одним кадром (массивом m_FigArray), добавил его в m_FrameArr. Т.е. элементом m_FrameArr будут массивы m_FigArray, в каждом из которых будут свои объекты.
При выводе кадра на экран я пытаюсь в m_FigArray записать m_FrameArr[0]. Проблема в том, что просто присвоить, разыменовав указатель не получается - выводится ошибка. Как сделать это правильно?
 
G

grigsoft

Не, указатель на статические объекты не разименовывается. Не совсем понял что тебе надо (что куда записать?), но судя по всему m_FigArray должен создаваться в хипе через new CFigArray(), потом складывается в m_FrameArr, и создается новый объект аналогично. Потом не забыть удалить объекты из массива - MFC этого не сделает.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!