Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

два 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]


> ...

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо