Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
ВнизГлюки Delphi Найти похожие ветки
← →
novarm (2003-04-08 14:01) [0]Возникла проблема с Delphi 5
Пишу довольно большую и сложную программу.
При этом активно используются динамические массивы объектов (один в другом)
Например:
type
TBus=object
number:integer;
...
line:array of TNLine;
...
end;
при этом TNLine тоже содержит динамические массивы объектов и т.д.
Иногда возникают странные глюки:
В методе
procedure TBus.method;
begin
..
end;
обращение вида "high(line)" вызывает ошибку Read of address...
Если поставить вначале процедуры - покатит, а в конце - иногда вот такая ерунда выскакивает.
При этом если поставить
with bus[number] do
begin
тело процедуры
end;
, что по идее лишено всякого смысла, то все начинает работать.
Но вот проблема: на высокоскоростных машинах такое появляется чаще и в итоге
уже в откомпилированной программе где-нибудь может выплыть этот глюк, при этом
Read of Address ... он не показывает, а просто выходит из процедуры где-нибудь посередине
(причем каждый раз по разному).
Может-ли это быть связано с тем, что Delphi не совсем лицензионный?
p.s. С памятью все нормально, уже проверялось в нескольких местах (эффект одинаковый).
← →
Palladin (2003-04-08 14:05) [1]Это может быть связано только с твоей программой и ни с чем более.
Давай сюда конкретный код, а не намеки...
← →
Skier (2003-04-08 15:15) [2]>novarm
Если путаешься с дин. массивами, то можно перейти на
использование списков TList или TObjectList
← →
Anatoly Podgoretsky (2003-04-08 15:16) [3]Да сначала на глюки у Борланда или в железе, а потом как всегда
← →
paxer (2003-04-08 18:32) [4]Где-то выходишь за границы массива, затираешь лежащую фиг знает где и фиг знает какую информацию. Делфи выход за пределы динамического массива не отслеживает. Потом при работе программы появляются сбои в местах, кои отношения к массивам никакого не имеют.
Например, затер адреса процедур объекта, при попытке их выполнения получил....ну че нибудь эдакое.
← →
MityaP (2003-04-08 18:47) [5]в момент обращения line у тебя походу пустой...
А ты случаем не в такой строке ошибка
line[high(line)]???
Тогда очевидна ошибка: у тебя массив пустой
(а объекта line[-1] не существует - В этом случая твоя ошибка Read of address... возникает.!)
Приведи конкретную процедедцру, в которой ошибка...
У такой ошибки сроду не было... хотя везде использую эти динамические объекты... Всегда проверку делаю на наличие элементов в массиве и на их пустоту элемента...
← →
Palladin (2003-04-08 19:31) [6]Удалено модератором
← →
novarm (2003-04-08 20:35) [7]Господа!
Спасибо за ответы, но все это мы уже проходили, а по поводу "Глюк может быть только у меня", то за 5 лет работы с Delphi, по его глюкам и глюкам стандартных компонентов могу уже брошюру выпустить.
В том то и дело что код вида
procedure TBus.method;
begin
...
end;
не работает !!!ИНОГДА!!!
, а вида
procedure TBus.method;
begin
with bus[thisbusnumber] do
begin
...
end;
end;
сбоев уже не дает
← →
Palladin (2003-04-08 21:42) [8]Удалено модератором
← →
evvcom (2003-04-09 09:20) [9]To paxer:
Делфи выход за пределы динамического массива не отслеживает.
Неправда Ваша молодой человек. Если стоит флажок Range сhecking, то Дельфи четко отслеживает выход за пределы любого массива. Попробуйте это посмотреть через CPU Window.
← →
Lord Warlock (2003-04-09 09:36) [10]
> novarm (08.04.03 20:35)
(как заметка)
У меня тоже имеется оч. сложная прога с похожим построением классов (дин массивы объектов), таких ошибок никогда не было ни на одной машине.
Единственное, доступ к таким массивам я организовал через свойства, но внутренние методы классов пользуют массивы напрямую через Low и High, проблем с этим не было
Про глюки в коде ничего писать не буду :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c