![]() |
|
|
![]()
|
|
| Rickert |
|
||||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Есть функция из которой вызывается другая функция. Во второй выделяется память для указателя типа char:
Где str - CString передоваемая в функцию, как параметр. Далее идут различные манипуляции со строкой mstr и в конце функции:
chr - другой указатель типа char тоже. Иду дебагом и на delete [] mstr вываливается ошибка. См. аттач Добавлено @ 05:15 ЗЫ пробовал убрать сейчас первый delete [] mstr и оставить только delete [] chr - та же фигня. А если убрать обоих, то получаем утечку памяти, что ни есть гуд. Присоединённый файл ( Кол-во скачиваний: 7 )
01.jpg 22,33 Kb-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
||||
|
|||||
| DukeCpp |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: 1 Всего: 1 |
Если не ошибаюсь, такое бывает при попытке высвободить занятую чем-то ещё другим память. Т.е. участок памяти под вашу строку пересекается с другой зарезервированной памятью. Приведите код полностью, если можно.
Если не происходит переназначений указателей, то можете поюзать auto_ptr и забыть про необходимость удаления; иначе, если это недопустимо (использование auto_ptr), то можно пользовать указатель со счётчиком ссылок boost::shared_ptr; Это сообщение отредактировал(а) DukeCpp - 23.10.2006, 05:27 |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| DukeCpp |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: 1 Всего: 1 |
Вот здесь происходит нечестное обращение с памятью:
Выделили один байт (почему бы, кстати, не просто char chr, если нужен всего один байт; не криминально, -- просто непонятно). Далее:
вот под второй символ память не выделяли, обращаемся неизвестно к какому сегменту. Теперь ясно, зачем был new: видимо, имелось ввиду:
Тоже самое здесь:
выделили str.GetLength() байт. Их индексы 0..str.GetLength()-1. Обращаемся к str.GetLength()-ому, а под него память не выделяли. Решение тоже: поставить +1. Это сообщение отредактировал(а) DukeCpp - 23.10.2006, 06:23 |
||||||||
|
|||||||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
Блин, вот я дурень, проверял же это!
Благодарю! -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |