![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| webgraf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
Выдает ошибку при запуске(конкретно - при добавлении в очередь). Вроде как проблемы с кучей(dbgheap.c). Как правильно организовать в очередь из блоков данных?
Это сообщение отредактировал(а) webgraf - 7.6.2007, 11:40 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
удалено
Это сообщение отредактировал(а) Fazil6 - 7.6.2007, 12:04 |
|||
|
||||
| webgraf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
а вот со строками все просто работает:
Как с блоками данных быть? |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
тебе нужен конструктор копии. Поумолчанию будет тупо копировать unsigned char * buf и потом при удалении твоих объектов pdata в деструкторе будет пытаться вызывать free 2 раза для одного и тогоже участка памяти
|
|||
|
||||
| evGenie |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 7.6.2007 Где: Челябинск Репутация: нет Всего: 1 |
А в строчке
ведь сначала создается объект (вызывается конструктор), а потом происходит вызов конструктора копий? Который, сгенерированный по умолчанию, в твоем случае не работает, т.к. память выделяется с помощью malloc(). Определи соответствующий конструктор и все. |
|||
|
||||
| korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 2 Всего: 14 |
Констрктор копирования и оператор присваивания переопредели
-------------------- korbian © |
|||
|
||||
| webgraf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
Т.е. теперь память выделяется при вызове конструтора копии? |
|||
|
||||
| korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 2 Всего: 14 |
Выделяешь новую память и копируешь в нее содержимое pdata::buf копируемого объекта.
-------------------- korbian © |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| webgraf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
А деструктор не нужно править? У меня проблемы возникают когда pop делаю из очереди. Не находит голову очереди. korbian, не совсем понимаю... можешь кодом объяснить хоть немного? Это сообщение отредактировал(а) webgraf - 7.6.2007, 15:29 |
|||
|
||||
| Fazil6 |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
все он находит. В твоем коде
после того как эта строка отработает, локальный объект переданный в параметре разрушается и вызывается деструктор, который делает
но из-за отсытствия твоего конструктора копии объект сохраненный в очередь ссылается на этуже память. И когда ты делаешь pop , вызывается деструктор этого объекта и вызывается повторно free(buf); но этот buf уже освобожден
я же написал тебе конструктор копии раньше. В принципе его хватит чтобы от этой ошибки избавиться, но оператор присваивания тоже надо писать |
||||||||
|
|||||||||
| webgraf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
Fazil6, извини что отнимаю время своей тупостью, но пробую вот-так pop-ать :
И получаю как раз результат - второй раз front не находит голову. Это как раз из-за оператора присваивания? |
|||
|
||||
| korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 2 Всего: 14 |
-------------------- korbian © |
|||
|
||||
| webgraf |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
если убрать из конструктора, все равно не присваивает (( вот что получается:
|
||||
|
|||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
нету здесь присваивания... info у тебя не объект, а ссылка Добавлено через 3 минуты и 26 секунд точнее здесь уже есть присваивание, но самому себе Добавлено через 9 минут и 47 секунд вообще так работая ты получишь конечно эксепшен.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |