2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Динамические массивы [Delphi]
Сообщение11.02.2010, 19:02 
Аватара пользователя
Язык программирования: Delphi. Компилятор Borland 7
Всем прива!!! Дело вот в чем. Откомпилировал программу, синтаксических ошибок не найдено и на выполненние запущен .exe файл. Начало хорошее. Я заполняю необходимые поля ввода. Вспомогаельые расчеты идут хорошо и... тут туфтовая ошибка! Дело дошло до того, что я компилировал программу буквально после каждой строчки и доводил её до успешного завершения. И подкараулил я эту туфтовую ошибку на следующей безобидной вещи - сразу после объявления динамического массива в разделе var : masSpectr : array of real; Дело в том, что в программе уже есть порядка десяти динамических массивов. Может быть есть какой-нибуь лимит на количество динамических массивов? Во всяком случае другого объяснения я не вижу.

 
 
 
 Re: Динамические массивы
Сообщение12.02.2010, 00:52 
Цитата:
тут туфтовая ошибка!

Что именно за ошибка?

P.S.: Приведите фрагменты кода, работающего с проблемным массивом.

 
 
 
 Re: Динамические массивы
Сообщение12.02.2010, 01:30 
Alhimik в сообщении #287206 писал(а):
И подкараулил я эту туфтовую ошибку на следующей безобидной вещи - сразу после объявления динамического массива в разделе var : masSpectr : array of real;

Скорее всего у вас где то память бьется, а эта строчка случайно порождает "неудачное" расположение памяти.

 
 
 
 Re: Динамические массивы
Сообщение12.02.2010, 18:46 
Аватара пользователя
Ошибка:
Project DopplerFrequency.exe raised exception class EAccessViolation with message 'Access violation at address 00404EDB in module 'DopplerFrequency.exe'. Read of address 00000100' Process stopped. Use Step or Run to continue.

И в том то и дело, что с этим массивом я не работаю - я просто его объявил.
Прогрмма у меня довольно большая. Так что не думаю, что у кого-то кроме меня еще может появиться желание расчехлиться в ней.

 
 
 
 Re: Динамические массивы
Сообщение12.02.2010, 18:59 
Alhimik в сообщении #287466 писал(а):
Read of address 00000100

Скорее всего неинициализированный указатель или не созданый объект. Приводите код.

 
 
 
 Re: Динамические массивы
Сообщение12.02.2010, 23:01 
Alhimik в сообщении #287466 писал(а):
И в том то и дело, что с этим массивом я не работаю - я просто его объявил.

Раз объявили его как переменную, значит выделили под нее память, даже если вы с ним не работали то все равно расположение остальных данных в памяти изменилось.

А перехватить этот эксепшин не пробовали?

 
 
 
 Re: Динамические массивы
Сообщение13.02.2010, 02:10 
2Alhimik
Цитата:
Прогрмма у меня довольно большая.

Если массив глобальный, приведите текст модуля, если локальный -- текст процедуры\функции. В чем проблема? А то игра в ясновидение получается. :)

 
 
 
 Re: Динамические массивы
Сообщение13.02.2010, 03:06 
Стесняюсь спросить: а что, в отладчике нельзя пройти и посмотреть, где падает?

 
 
 
 Re: Динамические массивы
Сообщение14.02.2010, 08:16 
Аватара пользователя
Circiter в сообщении #287524 писал(а):
2Alhimik
Цитата:
Прогрмма у меня довольно большая.

Если массив глобальный, приведите текст модуля, если локальный -- текст процедуры\функции. В чем проблема? А то игра в ясновидение получается. :)


Массив глобальный. В программе 12 форм (модулей 14 - два из них писал сам). Кому интерестно - могу скинуть на e-mail. Выкладывать этот здоровый текст программы тут - по прежнему не вижу смыла, да и модераторы мне этого не простят. Да и к тому же проблема, вроде как решилась. Есть такой файл var.txt , где объявлены все глобальные переменные в порядке форм. Если объявлять массив в середние файла - ошибка, я попробовал объявить в конце - и как по маслу. Может причина действительно в распределении памяти.
Кстати да, а как перехватывать экскепшин? Я слышал о существовании какого-то режима отладки, где можно отслеживать чему равна каждая перемення на каждой строке при выполнении. На практике ни разу не применял.

 
 
 
 Re: Динамические массивы
Сообщение14.02.2010, 09:12 
Откройте для себя try, except...

 
 
 
 Re: Динамические массивы
Сообщение17.02.2010, 16:43 
Аватара пользователя
Не мой стиль. Если делишь на что-то, что вводит пользователь - обязательно заранее проверь не ноль ли это.
При работе с динамическими массивам - сначала установить размер массива SetLenght (masDinmicq, N); и нумерация начинается с нуля i= 0..N-1; (самые расспространённые ошибки).
В данном случае, p51x, применение try ... except ничем не поможет. Это почти тоже самое, что место
i:=0;
while i<=N-1 do
begin
...
i:= i+1;
end;

писать for i:=0 to N-1 do ....

 
 
 
 Re: Динамические массивы
Сообщение17.02.2010, 17:15 
Не тоже самое. Пример, динамический массив не создался или его указатель затерся... оба ваши варианты вылетят.

-- Ср фев 17, 2010 17:16:37 --

Без кода можно долго телепать. Основные причины я указал.

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group