| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Помогите найти ошибку |
| Автор: Illusion Dolphin 10.8.2004, 19:23 |
| Люди! Человеки! Которую неделю видел в программе один странный глюк, но всё руки не доходили, а теперь дошли :/... День сидел в отладке и поисках - ноль по фазе. В общем - ошибка при работе с памятью (90% - все симптомы). Не удаётся выделить тот кусок программы, который даёт ошибку, поэтому я её обрезал до "необходимого минимума ошибки": http://www.illusdolphin.narod.ru/test.zip Пожалуйста, посмотрите, в чём дело. Компилировал на делфи7. Для того, чтобы произошла ошибка нужно создать папку "C:\Dolphin\1\234' (да можно любое, просто по умолчанию такая была |
| Автор: p0s0l 10.8.2004, 21:19 | ||||||||||
Немного глянул...
Это происходит на ExtractAssociatedIcon - посмотри недавние темы, была темка про ошибку в этой функции (она изменяет FileName, хотя не должна...
Если закомментировать строку: TExplorerThreadNotifyDirectoryChange.Create(False,s,DirectoryChanged,CurrentGUID,@CurrentGUID); то ошибки не происходит, видимо ошибка тут... Если присмотреться, то сомнительным кажется код:
Выделяется памяти FileNameLength + 2, а обнуляется в 4 раза больше... А я делал так, чтобы особо не мудрить:
Заменив этот код , и убрав этот кусок:
Ошибок больше не вылазило, но почему-то переименование отлавливается только 1 раз... Это видимо уже где-то логическая ошибка... |
| Автор: Illusion Dolphin 10.8.2004, 22:16 | ||||
Да, это один из "интересных мест". действительно, с этой функцией были неполадки (я это давно заметил, но в связи с тем, что это не единственное место такого типа, не убирал его). Я поищу на эту тему справку. А в чём точно эта ошибка выражается? Почему она лезет совсем в "левую" память?
Это всё норма, это я уже начал "мудрить" с горя (проблвал преувеличить ошибку, если она тут 8) ). Там 4-ки нет. Этот модуль без ошибки (я ещё более упростил проект, уже вообще полупустая прога, но с ошибкой 8)...). P.S. нашёл топик по ExtractAssociatedIcon... это по-моему то, что и было... |
| Автор: Петрович 11.8.2004, 09:08 | ||||||
Это не ошибка! Читайте MSDN:
to Illusion Dolphin
Поищи, то ли здесь, то ли на сорсах я об этом уже писал. Если кратко, то: ExtractAssociatedIcon в lpIconPath возвращает измененный путь. Причем, иногда, как в твоем случае этот путь длинее чем тот который ты ему передал. Вот ExtractAssociatedIcon и вылезает за пределы той памяти гда у тебя размещался путь передаваемый в него. Надо перед вызовом ExtractAssociatedIcon создать буфер размером MAX_PATH символов (+1 для завершающего #0), скопировать туда твой путь, и именно этот буфер передавать в ExtractAssociatedIcon. |