Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2011, 21:28   #1
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию C++ - непонятная проблема

Пишу класс для хранения чисел в битовой карте.
Среда - VS2010, консольное приложение С++.
Она представлена массивом char, если K-тое число в карте есть, K-й бит равен единице.

Программа выполняется нормально, но при завершении, в районе return 0; вылетает ASSERT

нагуглил, что это может быть связано с delete.
delete[] у меня выполняется в трех местах - применительно к char*bitmask:
1) деструктор
2) добавление памяти (создать новый массив, удалить старый, переназначить указатель на новый)
3) копирование по оператору присваивания - удаление старой памяти (аналогично добавлению памяти)
Изображения
Тип файла: png assert.PNG (37.2 Кб, 52 просмотров)
Вложения
Тип файла: zip oop_lab1_osipov.zip (10.9 Кб, 10 просмотров)

Последний раз редактировалось Namolem; 14.09.2011 в 21:38.
Namolem вне форума Ответить с цитированием
Старый 14.09.2011, 21:33   #2
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Пришлите куски кода, где есть delete
fizteh вне форума Ответить с цитированием
Старый 14.09.2011, 21:34   #3
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Приложи исходник.
Son Of Pain вне форума Ответить с цитированием
Старый 14.09.2011, 21:38   #4
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

Добавил код в аттаче
Namolem вне форума Ответить с цитированием
Старый 14.09.2011, 22:02   #5
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Ошибка в методе union. Он возвращает по ссылке this (объект, для которого его вызвали); при возвращении по ссылке копирования не происходит - следовательно, получается два идентичных объекта (делящих указатель на одну и ту же битовую карту). Оба объекта при завершении программы уничтожаются, и при удалении второго возникает ошибка, поскольку его карту уже удалили.

Короче, в методе union вместо return *this; должно быть написано return *resultSet;
Son Of Pain вне форума Ответить с цитированием
Старый 14.09.2011, 22:04   #6
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

да, точно, спасибо

писал затычку, чтобы не выдавало ошибки, а в конце поменять забыл(
Namolem вне форума Ответить с цитированием
Старый 14.09.2011, 22:07   #7
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Да, к слову, возвращать по ссылке объекты, созданные с помощью new - очень плохая идея. После выхода ссылки из области видимости память, выделенная для объекта, не освобождается автоматически, и это приходится делать вручную извращенным способом.
Son Of Pain вне форума Ответить с цитированием
Старый 16.09.2011, 00:56   #8
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

Вот опять ошибка, три раза просмотрел и ничего не увидел.

Опять же ошибка при конце программы
Вложения
Тип файла: zip oop_lab1_osipov.zip (12.5 Кб, 11 просмотров)
Namolem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятная проблема CrazyDude Работа с сетью в Delphi 2 02.04.2010 00:35
Непонятная проблема с циклом RIO Общие вопросы Delphi 3 31.01.2010 23:29
Непонятная проблема. ROD Компьютерное железо 17 05.09.2009 11:09
проблема с печатью. непонятная ошибка. фЁдОр Общие вопросы Delphi 10 04.06.2009 13:37