Здравствуйте, гость ( Вход | Регистрация )
|
rominf |
21.8.2012, 23:10
Сообщение
#1
|
|
Студент ![]() Группа: Участник Сообщений: 20 Регистрация: 20.8.2011 Пользователь №: 2820 Спасибо сказали: 1 раз(а) Репутация: 0
|
Здравствуйте!
К программе на Qt 4 подключается .so библиотека, написанная на Free Pascal (Lazarus). В библиотеке есть функция, принимающая по указателю массив (Size = 10): В программе: На (*) вылетает с ошибкой SIGFPE. Если заменить на передачу по ссылке (procedure Sort(var A: TDoubleArray); stdcall;) то всё идентично. Когда делал аналогично для сумы, но с передачей по значению (function Sum(A: TDoubleArray): Double; stdcall;), то ошибки не возникало. Замечу, что судя по тому, что показывает дебагер, обе функции работают (при возврате управления в программу вижу отсортированный массив). Чувствую, что проблема в выделении памяти, но, к сожалению, раньше не имел опыта по созданию динамических библиотек, поэтому не понимаю, что у меня неправильно. И мне не очень нравится использование вектора, чтобы передать его как массив, но писать в стиле С не удобно. Подскажите, пожалуйста, в чём проблема. Буду благодарен за ссылки на литературу для глубокого изучения вопроса выделения памяти, стека вызовов, динамических библиотек. |
|
|
|
![]() |
|
PAFOS |
23.8.2012, 9:02
Сообщение
#2
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8
|
Посмотри, что значит SIGFPE Link.
И раз уж ты можешь шагнуть в sort, так в чем проблема? Посмотри где падает и какие значения переменных при падении, ну впрочем че учить, если умеешь пользоваться отладчиком)) |
|
|
|
|
rominf |
23.8.2012, 11:42
Сообщение
#3
|
|
Студент ![]() Группа: Участник Сообщений: 20 Регистрация: 20.8.2011 Пользователь №: 2820 Спасибо сказали: 1 раз(а) Репутация: 0
|
Цитата(PAFOS @ 23.8.2012, 10:02) Link Посмотри, что значит SIGFPE Link. Спасибо за ссылку. Я не могу понять, почему возникает именно эта ошибка: "попытка выполнения ошибочной арифметической операции". Я же выделяю память, скорее SIGSEGV должно вылететь, если я что-то криво делаю. Цитата(PAFOS @ 23.8.2012, 10:02) Link И раз уж ты можешь шагнуть в sort, так в чем проблема? Посмотри где падает и какие значения переменных при падении, ну впрочем че учить, если умеешь пользоваться отладчиком)) Оно падает у меня прямо на следующей строке после вызова функции из библиотеки. Ничего кроме объекта главного окна (с несколькими виджетами на нём), массива, указателя на QLibrary и функцию из библиотеки у меня нет. Массив правильной длины с такими же числами, как на входе, отсортирован. Что ещё можно посмотреть? |
|
|
|
rominf Передача массива из Qt программы в Free Pascal библиотеку 21.8.2012, 23:10
Алексей1153 Раскрывающийся текста что там с сортировкой намуче... 22.8.2012, 13:35
rominf Цитата(Алексей1153 @ 22.8.2012, 14:35) Ра... 22.8.2012, 20:37
PAFOS хм....
procedure Sort(A: PDoubleArray... 23.8.2012, 16:22
rominf Цитата(PAFOS @ 23.8.2012, 17:22) хм....
... 23.8.2012, 17:49
Iron Bug я не спец в паскале, но, похоже, что у тебя в Си о... 23.8.2012, 16:29
PAFOS Iron Bug, во во) 23.8.2012, 16:31
PAFOS Отредактировать сообщение можно будет после 20 ост... 23.8.2012, 19:01
rominf Цитата(PAFOS @ 23.8.2012, 20:01) Отредакт... 23.8.2012, 19:12![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 23.12.2025, 2:16 |