![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
два TiniFile.Create = Access violation
Garacio © (2007-01-24 15:34:00)Почему программа (в одной форме) не даёт два раза запустить:
begin
Ini:=TiniFile.Create(extractfilepath(Application.ExeName)+'Save.ini');
...
Ini.Free;
end;
Схема такая:
Create формы -> чтение из ini в Edit -> onChange Edit -> поиск файлов -> если найден, то сверяется со значением в ini
Т.о. я пишу данный код два раза. Программа не работает (Access violation), если только я не ввожу значение Edit вручную, или сам не проверяю названия полученных файлов, т.е. Делал для Edit - Save.ini, а для сверки Save2.ini, результат тот-же. Почему так происходит?
Loginov Dmitry (2007-01-24 20:32:00) [1]Это ж баян! Глобальный объект Ini юзается в данной процедуре, но он еще раз создается при каком-нить OnChange, уничтожается там, затем и в данной процедуре.
Anatoly Podgoretsky (2007-01-24 20:00:00) [2]
> ИМХО, ошибка где-то здесь.
Вообще то выше.
ANB (2007-01-24 18:27:00) [3]
> Ошибка возникает на втором Ini.Free;
значит к этому времени его уже освободили. имхо : твой кусок вызывается 2 раза, причем второй раз в .... А переменная Ini у тебя объявлена глобально. В результате, у тебя твой код работает второй раз с самого начала, трет старый указатель, потом освобождает новый, но при этом значение старого ты уже потерял. Есно Ini.Free второй раз дает ошибку.
См. пост №7. Ну и №8 тоже очень полезно.
Garacio (2007-01-24 17:36:00) [4]Что показывает пошаговая трассировка ?
Ошибка возникает на втором Ini.Free;
click (2007-01-24 16:43:00) [5]
> Плохиш © (24.01.07 16:33) [9]
> О опять Garacio, пойду лучше по порносайтам полазию.
Руки на одеяло!!! ;)
> Garacio ©
большинство здесь обитающих, как ты наверное убедился сам неоднократно, имеют родовую травму... и, что удивительно, у всех она одинаковая, а именно повреждение телепатора. Так что либо тебе прийдется привести тот злонесущий участок кода сюда, либо пытаться разобраться самому. Второе кстати куда более позитивно повлияет на твой IQ. Успехов.
Плохиш (2007-01-24 16:33:00) [6]О опять Garacio, пойду лучше по порносайтам полазию. Ему всё-равно что-либо объяснять бестолку, т.к. объяснять надо начиная с азов из книжки "Делфи для чайников за 21 секунду"...
КиТаЯц (2007-01-24 16:30:00) [7]
> begin
> Ini:=TiniFile.Create(extractfilepath(Application.ExeName)+'Save.
> ini');
> ...
> Ini.Free;
> end;
Трудно угадать, что скрывается за тремя точками, но все-же попытаюсь посоветовать...
Сделай так:
begin
Ini:=TiniFile.Create(extractfilepath(Application.ExeName)+'Save.ini');
try
...
finally
Ini.Free;
end;
end;
Джо (2007-01-24 15:53:00) [8]Для начала хотя бы сделай Ini локальной переменной, уже уменьшишь кол-во потенциальных ошибок.
Сергей М. (2007-01-24 15:48:00) [9]
> Garacio © (24.01.07 15:44) [5]
> at address 00000000
Ну хорошо, предположим, что вделенное жирным соответствует действительности.
Что показывает пошаговая трассировка ? Какая конкретно строчка твоего кода возбуждает данное исключение ?
Garacio (2007-01-24 15:44:00) [10]Проект Project1.exe вызвал исключение класса ЕAccessViolation с сообщением 'Access violation at address 00000000. Read of address 00000000'. Процесс остановлен.
Джо (2007-01-24 15:42:00) [11]> [3] Garacio © (24.01.07 15:41)
> > ...
>
> ИМХО, ошибка где-то здесь.
>
> Нет - это точно!
Это — предмет веры и обсуждению не подлежит. Если ты веришь в это — будь здоров и всяческих успехов! :)
Garacio (2007-01-24 15:41:00) [12]> ...
ИМХО, ошибка где-то здесь.
Нет - это точно! Во-первых, иначе почему действия выполняются по одиночке (при отсутствии автоматического выполнения другого)? Во-вторых, я пробовал зазные > ...
Сергей М. (2007-01-24 15:40:00) [13]
> Программа не работает (Access violation)
Что, прямо так и говорит, мол, "не работаю (Access violation)" ?
Или все-таки сподобишься привести сюда (или самому проанализировать, что гораздо лучше) дословныйтекст сообщения об исключении, который несет весьма важнуюинформацию для поиска ошибок ?
stone (2007-01-24 15:36:00) [14]
> ...
ИМХО, ошибка где-то здесь.