Страница 3 из 4
Re: SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 13:09:30
zub
>>Статическая проверка типа значения, присваиваемого элементу коллекции
Это конечно да, только для классов не так уж и нужно. ИМХО
Re: SIGSEGV do arrBitmap[b].Free; - что не так?
Добавлено: 25.01.2017 14:02:02
vitaly_l
zub писал(а):А вот гадать ассигн это или не ассигн не остается...
Это не assign

- заменил его на отрисовку и всё равно вылетает, значит увы не assign

.
В общем, работает только вариант Бородатого Пупсика, вот этот:
FreeAndNil(arrBitmap[b]) Бородатое СПАСИБО и бородатый респект - бородатому Пупсику и всем кто принимал участие тоже спасибо,

но не бородатое.
Итог: Проблема на 55% решена, про остальные 45%

никому не рассказывайте!
Вот чего она ещё пишет, но мне это реально непонятно, даже с моим крохотным знанием asm:
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 15:29:55
zub
>>Проблема на 55% решена,
Это как подорожник подкладывать под йодную сетку при открытом переломе))
Хорошо что у тебя хобби - паскаль, а не медицина...
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 15:48:02
vitaly_l
zub писал(а):Это как подорожник подкладывать под йодную сетку при открытом переломе))
Хорошо что у тебя хобби - паскаль, а не медицина...
Не так всё и страшно, в реальности - это Вы перегибаете. Я месяц держал эту строчку закомментированной и ничего страшного не было. Программа отключалась и снова включалась и так по 1000 раз в день и ничего.
Просто, решил в итоге пробить и проверить, а ВДРУГ я неправильно делаю? А сейчас - 100% можно быть уверенным, что память Free And Nill и если там что-то само без моего ведома чистит память (как Вы предположили), то метод Бородатого Пупсика - прекрасно выполняет оставшуюся задачу и присваивает переменным nil.
Ну а если же, сбой вдруг серьёзный как перелом, то он потом ещё где нить всплывёт. Я для себя пишу утилитку, поэтому тут же замечу любой сбой.
.
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:03:11
MysticCoder
Вангую, что проблема вернется чуть позже
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:07:41
vitaly_l
Нашёл, ещё одну странную зависимость...
В коде, на: FormCloseQuery, у меня появляется: messageDlg, который всплывает в случае наличия изменений и предлагает сохранить сделанную работу. Так вот, если запретить появление messageDlg, а значит и последующее появление OpenDialog, то память с arrBitmap[ b ].Free; - отчищается - без ошибки и программа закрывается - без сбоя.
В общем, всё пропало, виноват var MR : TModalResult;, который в FormCloseQuery...
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:15:12
MysticCoder
давай весь код, хорош в экстрасенсов играть
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:17:57
vitaly_l
MysticCoder писал(а):давай весь код, хорош в экстрасенсов играть
Код: Выделить всё
procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: boolean);
var MR : TModalResult;
begin
boModify := false; // блокирует появление диалога и тогда всё работает без сбоя.
try
if boModify then begin
MR := QuestionDlg('Вопрос', 'Сохранить изменения в проекте '+OpenDialog1.FileName+'?'+#13, mtConfirmation, [mrOK, 'Да', mrNo,'Нет', mrCancel,'Отмена'], 0);
case MR of
mrOK: if OpenDialog1.FileName <> ''
then actSaveExecute(Self)
else actSaveAsXMLExecute(Self);
mrNo: CanClose := true;
mrCancel: CanClose := false;
end;
end;
except
on e:exception do ShowMessage('Сбой при закрытии программы: '+#13+e.Message);
end;
end;
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:28:52
MysticCoder
-_-
весь код юнита. ты где то портишь память, и явно не в этих огрызках кода, что выдаешь.
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:31:54
zub
>>В общем, всё пропало, виноват var MR : TModalResult;, который в FormCloseQuery...
actSaveExecute или actSaveAsXMLExecute
>>Проблема гдето между FormCreate FormClose в голом виде всё ок.
Вижишь сколько всяких каках набирается в этом промежутке. Нужно учится отлаживать свои программы а не морочить людям головы
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:36:15
vitaly_l
MysticCoder писал(а):весь код юнита. ты где то портишь память, и явно не в этих огрызках кода, что выдаешь.
Весь код, где я заполняю битмапы - приведён выше. Дело не в битмапах, а в MR : TModalResult;
zub писал(а):actSaveExecute или actSaveAsXMLExecute
Абсолютно точно не они, вот я их закомментировал и всё равно сбой:
Код: Выделить всё
procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: boolean);
var MR : TModalResult;
begin
// boModify := false;
try
if boModify then begin
MR := QuestionDlg('Вопрос', 'Сохранить изменения в проекте '+OpenDialog1.FileName+'?'+#13, mtConfirmation, [mrOK, 'Да', mrNo,'Нет', mrCancel,'Отмена'], 0);
case MR of
mrOK: CanClose := true; //if OpenDialog1.FileName <> ''
// then CanClose := true // actSaveExecute(Self)
// else CanClose := true; // actSaveAsXMLExecute(Self);
mrNo: CanClose := true;
mrCancel: CanClose := false;
end;
end;
except
on e:exception do ShowMessage('Сбой при закрытии программы: '+#13+e.Message);
end;
end;
Выполняется только вот этот код
MR := QuestionDlg (итд) и выскакивает сбой, а если отключить, то всё чистится, как положено. Дело не в памяти, а в этом TModalResult ... Там видимо какой-то параллельный процесс запускается и успевает почистить память ?
zub писал(а):Нужно учится отлаживать свои программы а не морочить людям головы
Я просто спросил, чтобы удостовериться - все ли мои действия верны.
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:38:50
zub
>>Дело не в памяти, а в этом TModalResult ...
Нда..
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:47:25
vitaly_l
zub писал(а):>>Дело не в памяти, а в этом TModalResult ...
Нда..
Вот так всё работает - 100% без сбоя:
Код: Выделить всё
procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: boolean);
//var MR : TModalResult;
begin
// boModify := false;
try
if boModify then begin
//MR := ;
case QuestionDlg('Вопрос', 'Сохранить изменения в проекте '+OpenDialog1.FileName+'?'+#13, mtConfirmation, [mrOK, 'Да', mrNo,'Нет', mrCancel,'Отмена'], 0) of
mrOK: if OpenDialog1.FileName <> ''
then actSaveExecute(Self)
else actSaveAsXMLExecute(Self);
mrNo: CanClose := true;
mrCancel: CanClose := false;
end;
end;
except
on e:exception do ShowMessage('Сбой при закрытии программы: '+#13+e.Message);
end;
end;
Я просто запретил создание:
//var MR : TModalResult; и всё перестало сбоить <== Объяснить это художники не могут, может кто в курсе почему???
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 16:49:18
MysticCoder
vitaly_l писал(а):Дело не в битмапах, а в MR : TModalResult;
конечно же в MR : TModalResult; , это же на первом курсе еще объясняется, что им пользоваться нельзя и что он придуман только для того, чтобы сбои вызывать.
MysticCoder писал(а):Вангую, что проблема вернется чуть позже
vitaly_l писал(а):Нашёл, ещё одну странную зависимость...
вот этих странных зависимостей еще кучу найдешь, пока корень проблемы не найдешь. т.к. при порче памяти в одном положении системы все работает, а при любом чихе все катится к чертям.
Re: (решено на 55%) SIGSEGV do arrBitmap[b].Free; - что не т
Добавлено: 25.01.2017 17:20:34
vitaly_l
MysticCoder писал(а):вот этих странных зависимостей еще кучу найдешь, пока корень проблемы не найдешь. т.к. при порче памяти в одном положении системы все работает, а при любом чихе все катится к чертям.
У меня неправильное образование, в смысле у меня не было первого курса и сразу пришлось стать Великим и неповторимым магистром.
Как обнаружить порчу памяти???