![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
есть структура
struct TAzs { int NumAzs; AnsiString AzsName; }; есть класс class TAzsGroup { public: ... int NAzs; // количество станций TAzs *Azs; //станции TAzsGroup(); ~TAzsGroup(); void AddAzs(int NumAzs); void RemoveAzs(int NumAzs); bool CheckAzs(int NumAzs); }; -------------------- С уважением. Gray. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
И при этом ни кода конструктора, ни кода деструктора.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Сорри, не заметил, что часть сообщения отсеклась, браузер подглючил
есть структура struct TAzs { int NumAzs; AnsiString AzsName; }; есть класс class TAzsGroup { public: ... int NAzs; // количество станций TAzs *Azs; //станции TAzsGroup(); ~TAzsGroup(); void AddAzs(int NumAzs); }; void TAzsGroup::RemoveAzs(int NumAzs) { /*здесь запоминаю текущие структуры Azs*/ if(TAzsGroup::Azs != NULL) //указатель обновляю в конструкторе delete TAzsGroup::Azs; /*здесь создаю новый массив структур, включающий добавленную АЗС*/ } проблема в том, что при NAzs > 19 на операторе delete вываливается AccessVoilation. При NAzs<19 всё в порядке. В чём может быть проблема. Компилятор - C++ Builder (хотя в данном случае это и неважно). В чём может быть проблема? -------------------- С уважением. Gray. |
|||
|
||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Проверь следующую фишку.
Так правильно удаляется один объект, адресуемый указателем:
А вот так - массив объектов, адресуемый таким-же указателем:
(различия - в том, что во втором случае деструктор TAzs::~TAzs вызывается поочередно для каждого объекта, в то время как в первом - только для одного, указуемого ptr'ом). Ты используешь 1-й способ для освобождения памяти в "void TAzsGroup::RemoveAzs". Попробуй изменить код так:
-------------------- ![]() |
||||||
|
|||||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
приведи весь код.....
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
mr.DUDA - правильно говорит, раз ты полностью переписываешь структуру, то и удалять нужно всю структуру, а не один элемент структуры
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Спасибо mr.Duda, ошибка была именно в этом.
-------------------- С уважением. Gray. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |