Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Вниз

Ловля   Найти похожие ветки 

 
Сергей Б.   (2002-08-07 13:59) [0]

Приветствую, друзья! Проблемка наметилась: при выполнении происходит молчаливое вылетание программы без каких бы то ни было сообщений. Вернее сообщение от Дельфей есть, но оно как бы не об ошибке как это обычно бывает, а информационное: типа там у вас что-то с программой, фаулт какой-то и привет. После такого сообщения трассировка становится невозможной, выполнение кода как будто бы зацикливается. Если запускать программу вне Дельфей, то она просто схлопывается и выгружается из памяти. И тоже без сообщения об ошибке. Что за чудо?

Да! Началось всё с того, что я выделил кусок кода в виде процедуры без параметра (он у меня дважды вызывается). И вот при выходе из этой процедуры (по сути подпрограммы) всё гавкается. Блин, что же делать? Прошу совета!!!


 
Song   (2002-08-07 14:00) [1]

Ну... что можно сказать. Код хотя бы посмотреть проблемной процедуры.


 
tovSuhov   (2002-08-07 14:06) [2]

Тут ведь смотря какой фаулт...А вдруг сегментейшен?


 
Сергей Б.   (2002-08-07 14:08) [3]

Хм... 242 строки?


 
Сергей Б.   (2002-08-07 14:12) [4]

2 tovSuhov: "access violation at 0x0058e5b7: read of address 0x000004b2"


 
VaS   (2002-08-07 15:05) [5]

Код в студию.


 
Anatoly Podgoretsky   (2002-08-07 15:21) [6]

Указатели инициализируй


 
Сергей Б.   (2002-08-07 18:24) [7]


> Указатели инициализируй


А это как, извините?..


> Код в студию.


Да нет там ничего интересного. Когда он дважды повторялся, всё работало. Запихнул в процедуру (без изменений) - глючит.


 
ZrenBy   (2002-08-07 18:32) [8]

А эта процедура как описана ?

procedure TForm1.pr;
или
procedure pr;


 
Сергей Б.   (2002-08-07 18:40) [9]

Вот как:

procedure TForm1.Button1Click(Sender: TObject);

procedure MyProcedure; // это моя глючная проца
begin
...
end;

begin
...
MyProcedure; // это вызов моей глючной процы
DataSet1.Active := false; // на этом месте вылетает
... // и не важно что за код в этой строке
end;


 
ZrenBy   (2002-08-07 18:45) [10]

Вместо MyProcedure
напиши Tform1.MyProcedure
должно заработать
Я думаю, что DataSet1 принадлежит Form1
а MyProc - нет, и соответственно она не может к нему обратиться


 
ZrenBy   (2002-08-07 18:48) [11]

Про DataSet я сказал зря, но все равно попробуй


 
DAO   (2002-08-07 18:59) [12]

Мне кажется дело не в этом!!! Т.к. я раньше исп. проц. подход и писал их немерено в свойх прогахи причем таким же образом, т.е.
> procedure TForm1.Button1Click(Sender: TObject);
>
> procedure MyProcedure; // это моя глючная проца
> begin
> ...
> end;
>
> begin

У меня допустим такие ошибки чаще всего появляются когда обращаешься к объектам которых еще нет! Ну это тоже самое что и инициализация указателей!


 
Сергей Б (из дому)   (2002-08-07 19:22) [13]

Нет там ни динамически создаваемых объектов, ни указателей! :( Весь код строится вокруг предопределенных переменных и объектов.


 
MrBeer   (2002-08-07 19:47) [14]

esli problemi uzhe v sobrannom .exe ya obichno zapisivaju adres gde esjt problema, smotrju v IDA, a tam uzhe do Delphi 1 shag.


 
Сергей Б (из дому)   (2002-08-07 20:13) [15]

Да-а... Это, пожалуй, для меня сложновато. Последний раз я ассемблер в глаза видел лет 12 назад. Тогда программировать под Виндовз мало кто умел, только ДОС.


 
Cobalt   (2002-08-07 21:02) [16]

242 строки - это, конечно, напряжно будет... Да и объяснять, что делает каждая переменная...

Какие хоть классы/компоненты используете, параметры этих классов/компонентов - ? А то все равно что спрашивать у слепого - какая это буква?

Или попробуйте отказаться от этой процедуры и пихайте код "напрямую", ведь он работает?

А вы в процедуре не объявляли к-л. совпадающих по именам компонентов/переменных?


 
ЮЮ   (2002-08-08 05:35) [17]

Тогда поставь BreakPoint в теле процедуры и не поленись пройтись по ней, тогда увидишь где происходит access violation


 
VAleksey   (2002-08-08 06:37) [18]

если бы он обращался к не созданному объекту то Access violation был бы по адресу FFFF... или 00000....
Ты динамические массивы случаем в процедуре не используешь ?


 
IlyaA   (2002-08-08 07:36) [19]

Возможно, что ты просто выходишь где-то за рамки массива. Какие компоненты ты используешь в этой процедуре.

Замечание: Если эта процедура вызывается из какого-ни-ть объекта(напр. формы), то лучше сделай её методом этого объекта.


 
Сергей Б.   (2002-08-08 11:07) [20]


> пихайте код "напрямую", ведь он работает?

Да, видимо только это и поможет. :(


> процедуре не объявляли к-л. совпадающих по именам компонентов/переменных?

Нет, объявлений не было. Повторюсь, в процедуру запихнут дважды повторяющийся код. Никаких параметров! Никаких деклараций! Никаких локальных переменных!


> Тогда поставь BreakPoint в теле процедуры и не поленись

Не помогает. Процедура прекрасно отрабатывается, происходит выход из нее и при попытке выполнить любую инструкцию, следующую за вызовом, в теле вызывающей процедуры происходит ошибка.


> Ты динамические массивы случаем в процедуре не используешь
> ?

Нет. В других местах использую, но там все работает.


> Возможно, что ты просто выходишь где-то за рамки массива.
> Какие компоненты ты используешь в этой процедуре.

Компоненты? FIB использую.

Резюме: либо глючат компоненты FIB, либо Дельфя. Любопытно, что в интерфейсной процедуре, из которой происходит вызов злополучной процедуры, используется еще две, аналогичным образом построенные процедурки (они вызываются значительно чаще - тысячи раз за один проход), и с ними нет никаких проблем!!! А вот эта...


 
Yuri Btr   (2002-08-08 11:30) [21]

Даже не знаю, поможет ли мой опыт в вашем случае. Но всё равно посмотрите:
Я писал программу, которая соединяется с сервером FTP через компонент NMFTP заходит в одну директорию и делает ей LIST, в OnList я забил закачивание найденных файлов методом LIST. Так вот первое время я не мог понять, почему у меня программа вылетает при попытке закачать файл с сервака (Access Violation ...)- оказалось, что OnList вызывается чаще, чем я успеваю закачать файл. Т.е. я имел дело с "асинхронным" процессом.


 
VAleksey   (2002-08-08 13:07) [22]

Мне кажется дело где - то в динамическом массиве и выходе за его границы.
Проверь значения элементов массивов (и других указателей) до процедуры и после. (можно и трассировкой) Возможно ты где-то косвенно к ним обращаешся. Отсюда и сбои после процедуры.
А эти компоненты FIB ты в процедуре динамически создаешь - уничтожаешь ?


 
Andrey007   (2002-08-08 13:24) [23]

IMHO, пока код не будет опубликован, дельные советы дать невозможно.


 
Сергей Б.   (2002-08-08 15:33) [24]


> А эти компоненты FIB ты в процедуре динамически создаешь
> - уничтожаешь ?

Нет, используются только те, что брошены на форму изначально.


> пока код не будет опубликован

А если все-таки абстрагироваться? Есть кусок кода, он находится внутри интерфейсной процедуры. Повторяется два (три, четыре - неважно) раза. Этот код вырезается и оформляется в виде простейшей вложенной процедуры (ну прямо как подпрограмма в Бейсике). Вместо него прописывается вызов этой процедуры. И все! Такой модифицированный код нормально компилится. При трассировке процедура превосходно вызывается и выполняется. Но при выходе - БАЦ! и ошибка. Мистика!

Код могу представить, но только не на всеобщее обозрение. Если есть желающие, вышлю на мыло.


 
VaS   (2002-08-08 15:42) [25]

А не смешиваешь ли ты объектные и интерфейсные ссылки?


 
Сергей Б.   (2002-08-09 09:40) [26]

Каким образом? Подробнее плиззз...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.006 c
14-60845
vads
2002-07-25 08:25
2002.08.19
Срочно понадобилась процедура получения суммы прописью


7-60886
Сявчик
2002-06-01 08:21
2002.08.19
EXE


14-60811
Дмитрий Баранов
2002-07-23 18:24
2002.08.19
Проектирование бухгалтерских БД


1-60694
Дельфятник
2002-08-06 12:31
2002.08.19
Ещё один вопрос по очистке TList a.


7-60879
urich
2002-06-06 11:41
2002.08.19
Как добавить принтер в систему?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский