powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Form.OnClose caFree
16 сообщений из 16, страница 1 из 1
Form.OnClose caFree
    #40022046
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какая то бессмыслица у меня получилась... вроде все элементарно!

сделал класс формы, в нем на событие Form.OnClose делаю Action:=caFree, затем этот класс наследовал
делаю в методе другого класса обычный вызов этого наследника Form.ShowModal, по ответу начинаю ПОСЛЕДОВАТЕЛЬНО проверять свойства наследника - одно и то же свойство первый раз доступно, а следующей сразу проверкой - ошибка доступа

я конечно понимаю, что после получения ShowModal происходит OnClose с caFree, но почему в одном и том же методе свойства объекта вдруг пропадают постепенно, а не сразу, причем раньше этот же код работал без проблем, да и в других местах работает аналогичная логика, но насколько долго!?
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022049
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
я конечно понимаю, что после получения ShowModal происходит OnClose с caFree, но почему в одном и том же методе свойства объекта вдруг пропадают постепенно, а не сразу, причем раньше этот же код работал без проблем, да и в других местах работает аналогичная логика, но насколько долго!?

Потому что после ShowModal вы читаете мусор. Иногда там, совершенно случайно, оказывается нужное значение.
До этого работало исключительно чудом.

Нормальный подход в таком случае:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with TSomeForm.Create(ParentForm) do 
try
  ... установка начальных значений ...
  if ShowModal = mrOk then
  begin
     ... работа со свойствами ...
  end;
finally
  Free;
end;


И не трогать OnClose();
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022051
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

самое интересное что после ShowModal всегда нормально было много лет, а тут вдруг перестало, и почему вдруг перестало непонятно )
посмотрел старый exe - нормально работает, а вновь дописанный вообще в другом месте - вываливается в ошибку
бред какой то
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022056
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
больше то всего меня удивляет то, что первое чтение свойства доступно, доступно даже следующее в выражениях и операторах, а вот уже обращение второе (первое ок) с пересылкой куда то - ошибка )
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022058
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странный этот ваш дельфи, в VC++ я бы при завершении кучу неосвобожденной памяти увидел, а тут черт знает куда все девается.
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022060
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
странный этот ваш дельфи, в VC++ я бы при завершении кучу неосвобожденной памяти увидел, а тут черт знает куда все девается.

ReportMemoryLeaksOnShutdown := True;
Сейчас бы сравнивать дельфи с C++, где можно отстрелить себе ногу из чихнувшего кота...
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022061
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinв VC++ я бы при завершении кучу неосвобожденной памяти увидел

Наоборот, ты бы с таким подходом увидел кучу обращений к уже освобождённой памяти. Как
тебе и сказали выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022065
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp

ReportMemoryLeaksOnShutdown := True;

гугл говорит в Delphi 7 нету вообще такого, хотя делал на VC++ 2003 и все уже тогда отображало
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022070
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
самое интересное что после ShowModal всегда нормально было много лет, а тут вдруг перестало, и почему вдруг перестало непонятно )
посмотрел старый exe - нормально работает, а вновь дописанный вообще в другом месте - вываливается в ошибку
бред какой то

Самое интересное, что я в своей деревне 10 лет без прав ездил и всё нормально было. А тут вдруг в городе в ДТП попал и почему - непонятно. Пересмотрел старые записи с регистратора - ну нормально же ездил, а на этой улице в ДТП попал. Хотя руль крутил точно так же...
Бред какой-то.
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022071
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp

Самое интересное, что я в своей деревне 10 лет без прав ездил и всё нормально было. А тут вдруг в городе в ДТП попал и почему - непонятно. Пересмотрел старые записи с регистратора - ну нормально же ездил, а на этой улице в ДТП попал. Хотя руль крутил точно так же...
Бред какой-то.

не так - 10 лет ездил, положил сумку в багажник и теперь с ней в дтп попадаю ))
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022073
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Наоборот, ты бы с таким подходом увидел кучу обращений к уже освобождённой памяти. Как
тебе и сказали выше.

да это я к слову про неосвобожденную (в том смысле что я освобождаю память, но никак не могу посмотреть все освобождено или косяк за мной остался, от этого и сложилось впечатления что этот каФрии ничего не освобождает), в моем примере я бы получил почти всегда мусор или AV, а тут 10 лет ездило без проблем!
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022076
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при этом старый exe по прежнему готов ездить в этом участке кода БЕЗ ПРОБЛЕМ!!!
а новый - надо логику поменять )

при этом ничего кроме кода в другом месте не менялось
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022077
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinв моем примере я бы получил почти всегда мусор или AV, а тут 10 лет ездило без проблем!

Ну так просто твоё "почти всегда" растянулось на 10 лет. Новичкам везёт.
А AV в Дельфи ты не получил исключительно из-за использования собственного менеджера
памяти с пулом, который не отдаёт память операционке без необходимости.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022080
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverinпри этом ничего кроме кода в другом месте не менялось

Внезапно "код в другом месте" начал использовать память, освобождённую в этом месте, и
менять в ней байтики. Сурпрайз?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022081
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

А AV в Дельфи ты не получил исключительно из-за использования собственного менеджера
памяти с пулом, который не отдаёт память операционке без необходимости.

теперь понятно, спасибо
получается освобождай не освобождай, дельфи за меня решит )
...
Рейтинг: 0 / 0
Form.OnClose caFree
    #40022083
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Внезапно "код в другом месте" начал использовать память, освобождённую в этом месте, и
менять в ней байтики. Сурпрайз?..

в том то и дело, что ничего не использовало память в этом месте, обычное однопотоковое приложение, проверка свойства строго последовательно одного и того же в качестве теста.
видимо сам код в памяти стал "лежать" по другому и этот зловещий пул параллельно вытряхивает часть освобожденной памяти при втором опросе.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Form.OnClose caFree
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]