4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
|
||||||||||||||||
1 | ||||||||||||||||
Указатель на массив экземпляров класса08.09.2010, 09:18. Показов 5195. Ответов 7
Метки нет (Все метки)
Всем привет!
Есть класс:
Я делаю так:
Access violation at address <...> in module <...> Научите корректно работать с памятью....
0
|
08.09.2010, 09:18 | |
Ответы с готовыми решениями:
7
Динамический массив экземпляров класса, с неизвестным количеством экземпляров Двумерный динамический массив экземпляров класса Двухмерный динамический массив экземпляров класса TImage Указатель на массив экземпляров класса |
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
|
||||||
08.09.2010, 09:42 | 2 | |||||
А где выделяется память под массив указателей? Правильно... нигде.
Т.е. нужно выделить память под массив указателей.
А если не известен размер массива, то можно воспользоваться контейнерами, например list
1
|
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
|
||||||
08.09.2010, 09:52 [ТС] | 3 | |||||
Секундочку, то, что я указываю в квадратных скобках размер массива, не значит, что я выделяю память. Надо new использовать вроде?
Если я напишу
0
|
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
|
||||||
08.09.2010, 10:01 | 4 | |||||
Это значит, что будет выделена память под 4 указателя на класс SPicture. А память для самих классов (и вызов конструкторов ) выполняется при помощи оператора new.
1
|
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
|||||||||||||||||||||
08.09.2010, 10:11 | 5 | ||||||||||||||||||||
davian, ошибка происходит из-за того, что вы не делаете удаление старых объектов при создании новых, то есть вы не перераспределяете память, а просто выделяете новую область. Это вызывает утечку.
Для примера, создаём класс:
Для этого воспользуемся функцией realloc (для примера, количество необходимых объектов я буду получать из Edit1):
Вместо этого можно написать шаблон, который будет использовать операторы С++, такие как new и delete. Если интересно, могу помочь реализовать такой шаблон... Ещё один выход - использовать контейнеры list, vector, TList и другие.
2
|
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
|
|
08.09.2010, 10:46 [ТС] | 6 |
MikeSoft, Я понял, что вы имеете ввиду до места, где вы говорите о шаблоне...
0
|
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
|||||||||||
08.09.2010, 12:04 | 7 | ||||||||||
Сообщение было отмечено как решение
Решение
davian, для примера приведу шаблон для изменения размерности массива char:
При этом, объекты хранятся как массив указателей и обращение к ним производится посредством приведения Items[index] к нужному типу.
4
|
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
|
|
08.09.2010, 12:31 [ТС] | 8 |
MikeSoft, спасибо огромное за помощь. Я, пожалуй, воспользуюсь шаблоном...
0
|
08.09.2010, 12:31 | |
08.09.2010, 12:31 | |
Помогаю со студенческими работами здесь
8
Массив экземпляров класса Написать метод, инициализирующий массив экземпляров класса Как создать массив экземпляров класса, не проинициализировав его сразу? Массив в классе инициализируется только 1 раз для всех экземпляров класса Как создать массив экземпляров класса для последующего обращения к его элементам по ссылке? Как поступить, если необходимо создать массив экземпляров класса, но в классе нет конструктора по умолчанию? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |