Турбо Паскаль 6.0




Зависания.


Ошибки, приводящие к зависаниям, наиболее трудно отслеживать, но они могут быть найдены. Для начала Вы можете попробовать комбинацию точек прерывания, предложенную ранее для локализации места, в котором происходит зависание. Затем посмотрите, не освобождаются ли указатели дважды. Это может произойти когда видимый элемент освобождается своим владельцем, а затем Вы пытаетесь освободить его напрямую. Например:

{ Этот код приводит к зависанию системы } var Bruce, Pizza: PGroup; R: TRect; begin R.Assign(5, 5, 10, 20); Pizza := New(PGroup, Init(R)); R.Assign(10, 10, 20, 20); Bruce := New(PGroup, Init(R)); Bruce^.Insert(Pizza); Dispose(Bruce, Done); Dispose(Pizza, Done); end;

Освобождение группы Bruce так же освобождает подэлементы Pizza. Если Вы попытаетесь освободить Pizza, Ваша программа зависнет. К зависанию может так же приводить чтение данных потока в ошибочный тип объекта и некорректное приведение типа данных из коллекций.




Содержание  Назад  Вперед