Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > 1 шаг до дурдома или прикольный глюк.


Автор: GarryFV 18.2.2004, 13:28
WinXP, D7
Как известно, глюки всякие бывают, но такого ещё не видел.

Сосбтвенноручно написанная программа отказывается корректно работать в каталогах
с определенным именем =8-[= =].
А именно - при выходе возникает
Exception EInvalidPointer по адресу 00002864.
Invalid Pointer operation.

Где - неясно. Где-то уже в оконечном коде по высвобождению ресурсов.
Причём закономерности я не обнаружил smile.gif
Вот варианты имён каталогов.

С:\RezCopy\GizExe\tttttt - Exception
такой же, только на D:
D:\RezCopy\GizExe\tttttt - Exeption
C:\RezCopy\GizExe\ttttt - нормально и вообще нормально,
если длина имени последней папки меньше 6-ти символов,
а если 6 и больше - Exeption.
Может влияет общая длина пути? Нет:

D:\TMP111111111111111111111111111111111111111111111111111 - нормально smile.gif

и ещё хит, если путь в котором возникает Exception
D:\RezCopy\GizExe\tttttt изменить на
D:\TMP\RezCopy\GizExe\tttttt - тоже всё нормально smile.gif))

Кто что думает по этому поводу?
Любые версии принимаются, даже самые абсурдные.

Автор: Unregistered 18.2.2004, 13:38
Атрибуты посмотри

Автор: Cashey 18.2.2004, 14:32
А у тебя в программе или в свойствах проекта ни где путь \RezCopy\GizExe\ не прописан, может в к таблице или базе данных обращение происходит?

Автор: Петрович 18.2.2004, 14:40
Боюсь что имя каталога всего-навсего провацирует проявление совершенно другой ошибки. Подобное проявление могут иметь ошибки связанные с нарушением границ массивов(строк), использование неинициированных переменных (особенно локальных).

Что можно попробовать сделать:
1. Включи Warnings у компилятора и устрани их если есть конечно.
2. Включи Range checking
3. Выключи оптимизацию

Если не поможет, то далее процесс поиска, это уже индивидуальный процесс, зависящий от проги.

Автор: GarryFV 18.2.2004, 16:23
To Unregistered: Атрибуты не могут зависеть от имени каталога. Я же не переношу прогу из каталога в каталог, а переименовываю tttttt в ttttt.

to Cashey: Нет путь нигде не прописан. Обращение идет к Oracle по TCP/IP. Да и посмотри - пути самые разные в которых она работает и не работает. Например D:\TMP\1111...111\ - ничем не похож на другие, а в нём всё нормально.
Да, я ж только пути указал. Полное имя будет к примеру "D:\RezCopy\GizExe\tttttt\gis.exe"

Петровичу: Я не удивляюсь, что этот глюк есть, т.к. в некоторых местах мы весьма хитро работаем с памятью и если включить Range checking или оптимизацию, то вообще не будет работать smile.gif.
Особенно прикалывает оптимизация, когда этот очень умный компилятор подменяет куски кода таким образом, что всё идёт не так, как написано и "валится" вчистую.

Так вот - я не удивляюсь, что глюк есть, может где-то что-то и прошляпили (проект довольно монстроидальный), я "торчу" от условий его возникновения!

Автор: Vit 18.2.2004, 17:24
Тут всё понятно - хомут в памяти. Искать чрезвычайно сложно. Попробуй для начала включить в опциях компилляции "Range Check" и посмотреть как это влияет.

Автор: GarryFV 18.2.2004, 17:58
Ясно, что в памяти.
Почему от имени рабочего каталога зависит?

Я ещё понимаю, если б общая длина влияла - можно предположить, что более длинная строка что-то затирает.
А так - полный бред.

Ну да ладно, всё равно ж ничего из вышепреведённых условий не ясно.
Ясно, что прогу надо рыть, что при 2.2М исходниках (чисто только *.pas файлы) весьма затруднительно smile.gif.

Пока что эта штука работать не мешает, а там отщемим.
Или запишем known bugs : "Не помещайте программу в каталоги с именами [список] - это может привести к возникновению исключений при выходе из программы. Впрочем, если Вам это не мешает - помещайте куда хотите"

smile.gif

p.s. Тоже самое спросил на delphimaster, так ветку быренько удалили. Видать модерам название не понравилось или посчитали, что это чистый флуд, не имеющий ценности....

Автор: Vit 18.2.2004, 22:48
Цитата
Почему от имени рабочего каталога зависит?


Затирает чего-то в памяти... А то что не всегда, так откуда ты знаешь? Боюсь тебя огорчить, но скорее всего всегда, только не известно что в этой области памяти хранится и как это на ней отображается, может затирается не код, а какие-то данные, и подмена данных приводит к глюку не всегда, а только если на определённых местах чего-то стоит. Мало того, выход в том чтобы не рекомендовать определённые имена тоже не подходит, с большой долей вероятности на других компьютерах и при других условиях вылет быдет в других местах... Ещё раз предлагаю посмотреть мой совет:

Цитата
Попробуй для начала включить в опциях компилляции "Range Check" и посмотреть как это влияет.



Автор: GarryFV 19.2.2004, 10:47
Про Range Check я раньше писал smile.gif

Да найдём, конечно.

Я больше не за советами, а приколом поделиться. Глюк вылезает все-таки стабильно в каталогах с ОПРЕДЕЛЁННЫМИ ИМЕНАМИ. Условия, конечно, могут меняться, но в данном случае тест состоит только из запуска и закрытия проги.

З.Ы. тебе до 6666 три сообщения осталось smile.gif

Автор: p0s0l 19.2.2004, 18:32
А если попробовать каталог такой же длины, например:
С:\RezCopy\GizExe\uuuuuu
что будет ?

И путь у тебя в какой переменной хранится (если хранится) ? (её тип)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)