vitaly_l писал(а):Как обнаружить порчу памяти???
стать избранным, посвященным в таинства древнего и почти забытого ритуала отладки
Модератор: Модераторы
vitaly_l писал(а):Как обнаружить порчу памяти???
MysticCoder писал(а):стать избранным, посвященным в таинства древнего и почти забытого ритуала отладки
vitaly_l писал(а):Что для этого нужно и каков порядок действий?
procedure TFormMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);
var
b:byte;
begin
try
finally
for b := 0 to 22 do arrBitmap[b].Free; // <== вот на этом коде вылетает SIGSEGV - почему?
end;
end;
MysticCoder писал(а):можно "распечатать" массив, как ранее уже предлагали
vitaly_l писал(а):Я не понимаю, как распечатать массив?
var
f: TextFile;
...
AssignFile(f, 'stderr.txt');
Rewrite(f);
Writeln(f, 'We are inside class with Self=', PtrUInt(Pointer(Self)));
for b := 0 to 22 do begin
Writeln(f, 'Trying to delete arrBitmap[', b, ']=', PtrUInt(Pointer(arrBitmap[b])));
arrBitmap[b].Free;
end;
CloseFile(f);
Отладчик тоже сломался...
Дож писал(а):Обычная ситуация для программы с SIGSEGV'ом же.
We are inside class with Self=18655648
Trying to delete arrBitmap[0]=18383520
Trying to delete arrBitmap[1]=18383648
Trying to delete arrBitmap[2]=18383776
Trying to delete arrBitmap[3]=18383904
Trying to delete arrBitmap[4]=18384032
Trying to delete arrBitmap[5]=18384160
Trying to delete arrBitmap[6]=18384288
Trying to delete arrBitmap[7]=18384416
Trying to delete arrBitmap[8]=18384544
zub писал(а):А посмотрел бы стек вызовов сразу
zub писал(а):Кстати, в первом посте ты нас обманул.
zub писал(а):1 - вид\окна отладки\стек вызовов или простосто ctrl+alt+s в после вылета ты там увидишь цепочку вызовов приведшую к вылету. Соответственно, ты бы сразу понял что вылет при отображении, а не отображается оно потому что оно уничтожено...
Кстати, в первом посте ты нас обманул.
2 - первое предположение - ссылки в массиве на одно и тоже, или nil. ты бы увидел некоторые одинаковые элементы или nil
3 - считай что
if assigned(p)...
и
if p<>nil ...
одно и тоже
соответственно проверяя ты избегаешь действия с уже уничтоженой сущностью
4 думать вокруг них головой. например организовать лог
5 своя
Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8