Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.11;
Скачать: CL | DM;

Вниз

два TiniFile.Create = Access violation   Найти похожие ветки 

 
Garacio ©   (2007-01-24 15:34) [0]

Почему программа (в одной форме) не даёт два раза запустить:
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, результат тот-же. Почему так происходит?


 
stone ©   (2007-01-24 15:36) [1]


> ...

ИМХО, ошибка где-то здесь.


 
Сергей М. ©   (2007-01-24 15:40) [2]


> Программа не работает (Access violation)


Что, прямо так и говорит, мол, "не работаю (Access violation)" ?
Или все-таки сподобишься привести сюда (или самому проанализировать, что гораздо лучше) дословный текст сообщения об исключении, который несет весьма важную информацию для поиска ошибок ?


 
Garacio ©   (2007-01-24 15:41) [3]

> ...

ИМХО, ошибка где-то здесь.


Нет - это точно! Во-первых, иначе почему действия выполняются по одиночке (при отсутствии автоматического выполнения другого)? Во-вторых, я пробовал зазные > ...


 
Джо ©   (2007-01-24 15:42) [4]

> [3] Garacio ©   (24.01.07 15:41)
> > ...
>
> ИМХО, ошибка где-то здесь.
>
> Нет - это точно!

Это — предмет веры и обсуждению не подлежит. Если ты веришь в это — будь здоров и всяческих успехов! :)


 
Garacio ©   (2007-01-24 15:44) [5]

Проект Project1.exe вызвал исключение класса ЕAccessViolation с сообщением "Access violation at address 00000000. Read of address 00000000". Процесс остановлен.


 
Сергей М. ©   (2007-01-24 15:48) [6]


> Garacio ©   (24.01.07 15:44) [5]


> at address 00000000


Ну хорошо, предположим, что вделенное жирным соответствует действительности.

Что показывает пошаговая трассировка ? Какая конкретно строчка твоего кода возбуждает данное исключение ?


 
Джо ©   (2007-01-24 15:53) [7]

Для начала хотя бы сделай Ini локальной переменной, уже уменьшишь кол-во потенциальных ошибок.


 
КиТаЯц ©   (2007-01-24 16:30) [8]


> 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 16:33) [9]

О опять Garacio, пойду лучше по порносайтам полазию. Ему всё-равно что-либо объяснять бестолку, т.к. объяснять надо начиная с азов из книжки "Делфи для чайников за 21 секунду"...


 
click   (2007-01-24 16:43) [10]


> Плохиш ©   (24.01.07 16:33) [9]
> О опять Garacio, пойду лучше по порносайтам полазию.

Руки на одеяло!!! ;)

> Garacio ©

большинство здесь обитающих, как ты наверное убедился сам неоднократно, имеют родовую травму... и, что удивительно, у всех она одинаковая, а именно повреждение телепатора. Так что либо тебе прийдется привести тот злонесущий участок кода сюда, либо пытаться разобраться самому. Второе кстати куда более позитивно повлияет на твой IQ. Успехов.


 
Garacio ©   (2007-01-24 17:36) [11]

Что показывает пошаговая трассировка ?
Ошибка возникает на втором Ini.Free;


 
ANB ©   (2007-01-24 18:27) [12]


> Ошибка возникает на втором Ini.Free;

значит к этому времени его уже освободили. имхо : твой кусок вызывается 2 раза, причем второй раз в .... А переменная Ini у тебя объявлена глобально. В результате, у тебя твой код работает второй раз с самого начала, трет старый указатель, потом освобождает новый, но при этом значение старого ты уже потерял. Есно Ini.Free второй раз дает ошибку.
См. пост №7. Ну и №8 тоже очень полезно.


 
Anatoly Podgoretsky ©   (2007-01-24 20:00) [13]


> ИМХО, ошибка где-то здесь.

Вообще то выше.


 
Loginov Dmitry ©   (2007-01-24 20:32) [14]

Это ж баян! Глобальный объект Ini юзается в данной процедуре, но он еще раз создается при каком-нить OnChange, уничтожается там, затем и в данной процедуре.



Страницы: 1 вся ветка

Текущий архив: 2007.02.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
6-1157547727
провидец
2006-09-06 17:02
2007.02.11
TWebBrowser


3-1163689786
DelphiLexx
2006-11-16 18:09
2007.02.11
TDBTreeView, перемещение элементов


11-1147450294
XProger
2006-05-12 20:11
2007.02.11
Delphi 10 проблемы с компиляцией SysInit.pas


15-1169277534
lookin
2007-01-20 10:18
2007.02.11
Верх удовольствия от утреннего просмотра "Ивана Васильевича"...


15-1169127478
Александр Иванов
2007-01-18 16:37
2007.02.11
Чистосердечное признание уменьшает вину, или ламер ищет работу :)