Непонятная ошибка при выполнении

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение Akmal » 19.03.2006 10:19:33

Всем добрый день.

Написал программу подсчета траффика при помощи iptables на linux на fpc 2.0.2

компилируется программа без ошибок, но при выполнении програмки выдает следущее

[root@rubin develope_pascal]# ./acctraff
An unhandled exception occurred at $0805BF96 :
EInvalidPointer : Invalid pointer operation
$0805BF96
$0805C01B
$0805C036
$0805C5D4
$0805C62F
$0805B8BC
$08054EB8
$08054F66
$080591BF
$0804C5A8 P$ACCTRAFF_finalize_implicit, of /develope_pascal/acctraff.pas
$0805998F
$080599FE

что это такое не могу понять и откуда это вылазиет, я в паскале новичек поэтому если не сложно подскажите где копать
Akmal
новенький
 
Сообщения: 10
Зарегистрирован: 19.03.2006 10:02:56

Сообщение Janus » 19.03.2006 16:26:46

Что-то с указателями. Наверное, память не выделена. Точнее сказать нельзя. Нужно компилировать с отладочной инфой, тогда он выдаст файл и номер строки с ошибкой.
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49

Сообщение Guest » 19.03.2006 17:23:12

Фрагмент кода, где вылетает.
Guest
 

Сообщение Akmal » 20.03.2006 09:25:26

Дело в том что программа после компиляции выполняется и все что от нее требуется делает, но выдает в конце выполнения следущее:

[root@rubin develope_pascal]# ./acctraff
An unhandled exception occurred at $0805BF96 :
EInvalidPointer : Invalid pointer operation
$0805BF96
$0805C01B
$0805C036
$0805C5D4
$0805C62F
$0805B8BC
$08054EB8
$08054F66
$080591BF
$0804C5A8 P$ACCTRAFF_finalize_implicit, of /develope_pascal/acctraff.pas
$0805998F
$080599FE

Я эту прогу запускаю по crond каждые 5 минут, а crond естественно каждые 5 минут шлет руту письма что программа такаято вернула такоето значение.
Вот и хочу разобраться откуда это лезет.
Akmal
новенький
 
Сообщения: 10
Зарегистрирован: 19.03.2006 10:02:56

Сообщение STAKANOV » 20.03.2006 11:03:46

Вот и хочу разобраться откуда это лезет.

надо скомпилировать с ключем -gl
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение Илья Аввакумов » 20.03.2006 11:14:20

Akmal писал(а):EInvalidPointer : Invalid pointer operation
$0805BF96
$0805C01B
$0805C036
$0805C5D4
$0805C62F
$0805B8BC
$08054EB8
$08054F66
$080591BF
$0804C5A8 P$ACCTRAFF_finalize_implicit, of /develope_pascal/acctraff.pas
$0805998F
$080599FE

Откровенно говоря, это мало что может сказать. Попробуйте откомпилировать в проверкой на границы диапазона (Range checking code), то есть с опцией -Cr
А еще лучше использовать -Crtoi или -dDEBUG
Илья Аввакумов
новенький
 
Сообщения: 50
Зарегистрирован: 04.05.2005 15:06:42
Откуда: Екатеринбург

Сообщение Dmitry » 20.03.2006 11:40:54

Akmal писал(а): Дело в том что программа после компиляции выполняется и все что от нее требуется делает, но выдает в конце выполнения следущее:

То же самое было на FreeBSD под FPC 2.0.0.
Программа выполняла все требуемое, а при выходе вылетала с похожей ошибкой.
Все решилось с переходом на FPC 2.0.2.
У тебя похоже та же проблема. Попробуй на FPC 2.1.x.
Dmitry
новенький
 
Сообщения: 52
Зарегистрирован: 05.07.2005 08:53:06

Сообщение Akmal » 20.03.2006 15:13:36

А если не секрет где поставить этот ключ -gl, если я писал прогу в IDE FP
Akmal
новенький
 
Сообщения: 10
Зарегистрирован: 19.03.2006 10:02:56

Сообщение Илья Аввакумов » 20.03.2006 15:19:55

Options - Mode - DEBUG
Debugger - гдето там есть галочка
Илья Аввакумов
новенький
 
Сообщения: 50
Зарегистрирован: 04.05.2005 15:06:42
Откуда: Екатеринбург

Сообщение noch » 20.03.2006 16:55:43

а почему бы не заняться отладкой и не выяснить где конкретно вылетает?
Аватара пользователя
noch
постоялец
 
Сообщения: 145
Зарегистрирован: 07.06.2005 09:45:49
Откуда: Armenia

Сообщение Akmal » 20.03.2006 18:40:39

Люди!!!!!!!!!!!!
-gl не помогает.

Еще раз повторяю программа все делает что от нее требуется

в проге объявляется массив типа

arr_cl: array of array[0..5] jo string;

далее в проге считывается количество строк в файле
и на основе кол-ва строк выполняется функция

setlength[arr_cl, n_strok];

может здесь чтото не так - это как предположение.

Я в первый раз пишу программу, ВООБЩЕ В ПЕРВЫЙ РАЗ!!!!!!!!!1
Akmal
новенький
 
Сообщения: 10
Зарегистрирован: 19.03.2006 10:02:56

Сообщение Janus » 20.03.2006 21:40:20

Че-то не то.

зачем двумерный массив? Откуда квадратные скобки?

var
arr_cl: array of string;
...
SetLength(arr_cl, n_str - 1); //Нумерация с нуля, не забывай

Дай кусок кода побольше.
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49

Сообщение STAKANOV » 21.03.2006 09:45:15

Люди!!!!!!!!!!!!
-gl не помогает.

в смысле не помогает? теперь при ошибе должно выдавать номер строки

Я в первый раз пишу программу, ВООБЩЕ В ПЕРВЫЙ РАЗ!!!!!!!!!

показывай программу ;)
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение Akmal » 21.03.2006 11:36:15

Люди я готов дать вам посмотреть мой код, только не смейтесь над моими потугами. Писана программа в первый раз в жизни.
Akmal
новенький
 
Сообщения: 10
Зарегистрирован: 19.03.2006 10:02:56

Сообщение Илья Аввакумов » 22.03.2006 10:04:59

Не могу протестить прямо сейчас но, быть может, стОит переменные ft1 и ft2 объявлять локальными в каждой процедуре.
ЗЫ И все-таки, что там не срабатывает на опции -gl?
Илья Аввакумов
новенький
 
Сообщения: 50
Зарегистрирован: 04.05.2005 15:06:42
Откуда: Екатеринбург

След.

Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru