Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
9-67078
drhdh
2002-11-17 18:50
2003.04.21
Разрешение


14-67530
V-A-V
2003-04-04 13:00
2003.04.21
Компонент для создания архивов


6-67428
D
2003-02-19 13:45
2003.04.21
Имя или IP компьютера


1-67227
zDEUSz
2003-04-10 14:43
2003.04.21
Как дописать строку в существующий файл?


1-67202
Демонов Е.В.
2003-04-10 15:04
2003.04.21
Переменные окружения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский