| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Помогите отладить прогу |
| Автор: NiCketT 23.5.2008, 03:21 |
| 1. Неработают деструкторы (я их закоментировал) 2. В конце проги постоянно выскакивает какая-то ошибка. 3. В релизе выскакивает та же самая (или похожая) ошибка, только уже в начале проги (т.е. релиз неработает) Хелппп!!! |
| Автор: rrrFer 23.5.2008, 09:38 |
| NiCketT у меня никаких ошибок не выскакивет, напиши где именно и какая |
| Автор: rainbow86 23.5.2008, 09:58 | ||
| А почему ты думаешь что не работают деструкторы. Если есть new значит где то должен быть delete!!! Большая вероятность того что именно из-за этого и вылетает в конце!!! Добавлено через 2 минуты и 31 секунду расскоментируй деструкторы и посмотри что происходит после сортировки
Указатели на массивы городов в второй и третьей стране становятся невалидными!!! |
| Автор: pilotnet 23.5.2008, 11:39 | ||
У меня вылетает на функции
не стал разбираться но рекомендую убрать все массив и заменить их на вектора и всегда проверяй индексы - это стандартная ошибка новичка(и не только новичка) а в данном случае вообще можно отказатся от указателей и сделать все статически это куда надежней и никаких деструкторов не надо |
| Автор: bronislav 24.5.2008, 18:43 |
| Дело, в том, что память, которая была распределена в конструкторе с пом. оператора new, автоматически т.е. без использования оператора delete освобождается в даструкторе. Таким образом в дестуркторе ты пытаешься освободить память, которая тебе уже не пренадлежит и соответственно вылетве ошибка. |
| Автор: NiCketT 24.5.2008, 23:32 |
| ухты! я и не знал. т.е. можно обойтись вообще без деструкторов, я правильно понимаю? |
| Автор: bronislav 25.5.2008, 08:19 |
Я не знаю с каких пор, но преподователь в универе рассказывал мне так. Потом я еще делал експеримент, выделяя память в конструкторе и не освобождая в деструкторе, и память освобождалась. Можеи это конечно и не по стандарту, но ... |
| Автор: rrrFer 25.5.2008, 08:40 | ||
bronislav,
а в какой момент она освобождалась? случаем не при завершении работы программы? |
| Автор: Artemon 25.5.2008, 08:48 | ||||||
Прошу не вводить в заблуждение людей. Если вызвался деструктор, то значит он удалит сам объект, которому принадлежит. А если в объекте есть указатели на которые тоже была выделена память она так и останется выделенной, более того, она станет недоступной. пример:
В резальтате вызовится деструктор, который удалит объект A, затем вызовится delete [] Ptr, который удалит динамический массив. |
| Автор: bronislav 25.5.2008, 09:05 | ||
Cпасибо, за разъяснения! Буду знать и не вводить в заблужедние |
| Автор: NiCketT 25.5.2008, 11:25 |
| Всем спасибо! Тема закрыта. Вопрос решон |