2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Динамические массивы [Delphi]
Сообщение11.02.2010, 19:02 
Аватара пользователя


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

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение12.02.2010, 00:52 
Заслуженный участник


26/07/09
1559
Алматы
Цитата:
тут туфтовая ошибка!

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

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

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение12.02.2010, 01:30 


30/12/09
95
Alhimik в сообщении #287206 писал(а):
И подкараулил я эту туфтовую ошибку на следующей безобидной вещи - сразу после объявления динамического массива в разделе var : masSpectr : array of real;

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

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение12.02.2010, 18:46 
Аватара пользователя


30/05/09
121
Киев
Ошибка:
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 


06/04/09
156
Воронеж
Alhimik в сообщении #287466 писал(а):
Read of address 00000100

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

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение12.02.2010, 23:01 


30/12/09
95
Alhimik в сообщении #287466 писал(а):
И в том то и дело, что с этим массивом я не работаю - я просто его объявил.

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

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

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение13.02.2010, 02:10 
Заслуженный участник


26/07/09
1559
Алматы
2Alhimik
Цитата:
Прогрмма у меня довольно большая.

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

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение13.02.2010, 03:06 
Заслуженный участник


09/08/09
3438
С.Петербург
Стесняюсь спросить: а что, в отладчике нельзя пройти и посмотреть, где падает?

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение14.02.2010, 08:16 
Аватара пользователя


30/05/09
121
Киев
Circiter в сообщении #287524 писал(а):
2Alhimik
Цитата:
Прогрмма у меня довольно большая.

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


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

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение14.02.2010, 09:12 


06/04/09
156
Воронеж
Откройте для себя try, except...

 Профиль  
                  
 
 Re: Динамические массивы
Сообщение17.02.2010, 16:43 
Аватара пользователя


30/05/09
121
Киев
Не мой стиль. Если делишь на что-то, что вводит пользователь - обязательно заранее проверь не ноль ли это.
При работе с динамическими массивам - сначала установить размер массива 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 


06/04/09
156
Воронеж
Не тоже самое. Пример, динамический массив не создался или его указатель затерся... оба ваши варианты вылетят.

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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group