![]() |
|
#1
|
||||
|
||||
![]() Доброго времени суток!
Подскажите, пожайлуста, как устроние следующую проблему. У меня программа разбита на несколько независимых unit`ов. В одном из unit`ов (я его буду называть nameunit) прописан динамичный массив vari:array of real, к кторому из всех unit`ов имеется доступ. Ситуация следующая: один из unit`ов увеличивает кол-во эдементов массива - Код:
var te1:cardinal; begin ... te1:=length(nameunit.vari); setlength(nameunit.vari,te1+1); ... end; Нашёл, что ошибка возникает в строке setlength(nameunit.vari,te1+1); Вопрос: как её устранить или как её обойти? Чем это может быть вызвано? ЗЫ Этот кусок кода срабатывает в программе до ошибки 2 раза. На 2 раз возникает ошибка. Другие модули, как и этот unit, изменяют как значения элементов массива, так и кол-во элементов в нём. Заранее благодарен за помощь! Последний раз редактировалось Penguin, 28.03.2011 в 20:31. |
#2
|
|||
|
|||
![]() Для начала - пользуемся тегами!!!
Нужно больше информации. Давай точный текст сообщения об ошибке. Возможно, в следствии паралельного доступа к массиву, он просто заблокирован в момент вызова процедуры. А для того, что бы подумать как это переделать - нужен весь код, ну или хотябы описание того, что ты хочешь сделать. |
#3
|
||||
|
||||
![]() Вот два сообщения из Delphi.
Цитата:
Подпрограмма, которая содержит кусок данного кода, запускается по условию и единственное, что делает - это добавляет новый элемент в массив. Поток используется только один. Be or not to be - that`s the question. |
#4
|
||||
|
||||
![]() Разобрался! ;D
У кого возникнет подобная ошибка читать статью http://www.gunsmoker.ru/2009/05/access-violation.html Советую! Хорошая статья! Be or not to be - that`s the question. |
#5
|
|||
|
|||
![]() Никак не могу найти, то место исходного кода, где происходит ошибка EAccessViolation. Отладчик показывает на оператор закрытия функции «end», или показывает ассемблерную строчку какой-нибудь системной функции. Кто-нибудь сталкивался с такой проблемой? Помогите пожайлуста? Вот сам проект (zip, 16 кБ) и видео (YouTube или AVI, 16,5 Мб).
|
#6
|
|||
|
|||
![]() А в момент останова хорошо бы посмотреть окно View/ Debug Windows/ Call Stack
|