| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > При [] delete |
| Автор: Rickert 23.10.2006, 05:12 | ||||
Есть функция из которой вызывается другая функция. Во второй выделяется память для указателя типа char:
Где str - CString передоваемая в функцию, как параметр. Далее идут различные манипуляции со строкой mstr и в конце функции:
chr - другой указатель типа char тоже. Иду дебагом и на delete [] mstr вываливается ошибка. См. аттач Добавлено @ 05:15 ЗЫ пробовал убрать сейчас первый delete [] mstr и оставить только delete [] chr - та же фигня. А если убрать обоих, то получаем утечку памяти, что ни есть гуд. |
| Автор: DukeCpp 23.10.2006, 05:24 |
| Если не ошибаюсь, такое бывает при попытке высвободить занятую чем-то ещё другим память. Т.е. участок памяти под вашу строку пересекается с другой зарезервированной памятью. Приведите код полностью, если можно. Если не происходит переназначений указателей, то можете поюзать auto_ptr и забыть про необходимость удаления; иначе, если это недопустимо (использование auto_ptr), то можно пользовать указатель со счётчиком ссылок boost::shared_ptr; |
| Автор: Rickert 23.10.2006, 05:35 | ||
|
| Автор: DukeCpp 23.10.2006, 06:11 | ||||||||
Вот здесь происходит нечестное обращение с памятью:
Выделили один байт (почему бы, кстати, не просто char chr, если нужен всего один байт; не криминально, -- просто непонятно). Далее:
вот под второй символ память не выделяли, обращаемся неизвестно к какому сегменту. Теперь ясно, зачем был new: видимо, имелось ввиду:
Тоже самое здесь:
выделили str.GetLength() байт. Их индексы 0..str.GetLength()-1. Обращаемся к str.GetLength()-ому, а под него память не выделяли. Решение тоже: поставить +1. |
| Автор: Rickert 27.10.2006, 04:32 |
| Блин, вот я дурень, проверял же это! Благодарю! |