![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
NordWest |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Пишем программу в Qt. Начинали под винду, теперь есть непреодолимое желание использовать её ещё и под Линуксом, там более кросплатформ и всё такое... Но программа сопротивляется.
Вылетает она из библиотеки, которая позволяет работать со специальными графическими файлами. При открытии такого файла, т.е. при вызове метода fits_open_file() из этой библиотеки, программа вылетает, и если в релизе она это делает молча, то в дебуг-варианте в консоль выдается следующее: CODE Scope for 7037: Symbol fptr is a variable with multiple locations, length 4. Symbol imgtype is a variable with multiple locations, length 4. Symbol status is a variable with multiple locations, length 4. Symbol tstatus is a variable with multiple locations, length 4. Symbol lngscale is a variable with multiple locations, length 4. Symbol bscale is a variable with multiple locations, length 8. Symbol bzero is a variable with multiple locations, length 8. Symbol min_val is a variable in register st3, length 8. Symbol max_val is a variable in register st1, length 8. (gdb) Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists. (gdb) Это как же понимать? Области переменных смешались? |
|
|
SABROG |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Гость_Пчол_* |
![]()
Сообщение
#3
|
Гости ![]() |
ты лучше код покажи а не результат: тк это обычная ошибка сегментации и причин возникновения куча
|
|
|
Гость_Он_Же_* |
![]()
Сообщение
#4
|
Гости ![]() |
скорее всего неправльная работа с память: виндовый стиль программирования слишком расслабляет
|
|
|
Гость_Яже_* |
![]()
Сообщение
#5
|
Гости ![]() |
самая распространненая ошибка при работе с указателями и ссылками, хорошенько проверьте работу динамических элементов, особенно контейнеров и повышенное внимание параметрам функции
MVS + их компилер разрешает такие вещи от которых gcc жутко тянет блевать |
|
|
NordWest |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Начинали под винду, теперь есть непреодолимое желание использовать её ещё и под Линуксом, А под виндой какой компилятор используется? mingw32-make Цитата ты лучше код покажи а не результат: тк это обычная ошибка сегментации и причин возникновения куча
Объявление функции такое:
|
|
|
igor_bogomolov |
![]()
Сообщение
#7
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Вот твоя ошибка. Так делать категорически нельзя. fname у тебя невалиден.
char *fname = fitsFileName.toAscii().data(); подробно здесь Сообщение отредактировал igor_bogomolov - 21.4.2009, 22:37 |
|
|
SABROG |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
По сути тут область видимости временного объекта ограниченна таким образом:
Цитата char *fname = (fitsFileName.toAscii().data());
|
|
|
NordWest |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Вот твоя ошибка. Так делать категорически нельзя. fname у тебя невалиден. char *fname = fitsFileName.toAscii().data(); подробно здесь Делал так:
И так:
И так:
Но никак... Так как? |
|
|
Гость_Гость_* |
![]()
Сообщение
#10
|
Гости ![]() |
а может дело в первом параметре функции ?
|
|
|
NordWest |
![]()
Сообщение
#11
|
Студент ![]() Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Ага, только теперь при дебуге выдает ещё и это:
Цитата Program received signal SIGSEGV, Segmentation fault. 0x080df7bd in ffgiet (fptr=0x987b8e0, imgtype=0xbf827234, status=0xbf827220) at fitscore.c:7038 Program terminated with signal SIGSEGV, Segmentation fault. А вот код, на который ошибка указывает:
|
|
|
igor_bogomolov |
![]()
Сообщение
#12
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Гость_Гость_* |
![]()
Сообщение
#13
|
Гости ![]() |
fitsfile *fptr;//pointer ot FITSfile
ты уверен что под него не надо память выделять??? |
|
|
Гость_Гость_* |
![]()
Сообщение
#14
|
Гости ![]() |
fptr=0x987b8e0, imgtype=0xbf827234, status=0xbf827220
выбивается из контектста + ты перемудрил с **в объявлении и & в переданом значении, даже я не понимаю чего ты хочешь |
|
|
Гость_Гость_* |
![]()
Сообщение
#15
|
Гости ![]() |
я имелл в виду fptr=0x987b8e0 выбивается из контектста адресов выделеной памяти
|
|
|
igor_bogomolov |
![]()
Сообщение
#16
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
& в переданом значении, даже я не понимаю чего ты хочешь +1
Сообщение отредактировал igor_bogomolov - 21.4.2009, 23:53 |
|
|
ЙаМайскЫйПчОЛ |
![]()
Сообщение
#17
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 154 Регистрация: 10.7.2008 Из: СПб Пользователь №: 232 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
ну гдето так)))
а то даж залагиниться пришлось))))) |
|
|
igor_bogomolov |
![]()
Сообщение
#18
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
[oftop]
Так чтож сразу не залогинелся то? С конкретным человеком приятней общаться чем с анонимом ![]() [/offtop] |
|
|
ЙаМайскЫйПчОЛ |
![]()
Сообщение
#19
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 154 Регистрация: 10.7.2008 Из: СПб Пользователь №: 232 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
да думал поспать лечь, хрен уснеш когда у людей баги при кросплатформизации выявляются
|
|
|
igor_bogomolov |
![]()
Сообщение
#20
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
NordWest, погоди. Чет я не врубился. Это что, имелось в виду одно и то же
fits_open_file(&fptr, fname , READONLY,&status); int ffopen(fitsfile **fptr, const char *filename, int iomode, int *status); В смысле fits_open_file и ffopen???????????????77 Сообщение отредактировал igor_bogomolov - 22.4.2009, 0:05 |
|
|
ЙаМайскЫйПчОЛ |
![]()
Сообщение
#21
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 154 Регистрация: 10.7.2008 Из: СПб Пользователь №: 232 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
![]() ![]() ![]() ![]() всёёёёё мне такой херней еща завтра заниматься........ ![]() Сообщение отредактировал ЙаМайскЫйПчОЛ - 22.4.2009, 0:11 |
|
|
NordWest |
![]()
Сообщение
#22
|
Студент ![]() Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
В смысле fits_open_file и ffopen???????????????77 Одно и то же:
fitsfile *fptr;//pointer ot FITSfile ты уверен что под него не надо память выделять??? В примерах не нужно было, и в винде думаю это также проявилось бы. В описалове ещё что-то говориться о "Shared memory files", но пока не разберусь к чему это они. fits_open_file(fptr, qPrintable(fitsFileName) , READONLY, &status); //bkb fits_open_file(fptr, fitsFileName.toAscii().data() , READONLY, &status); Оба варианта результата не дают. |
|
|
ЙаМайскЫйПчОЛ |
![]()
Сообщение
#23
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 154 Регистрация: 10.7.2008 Из: СПб Пользователь №: 232 Спасибо сказали: 7 раз(а) Репутация: ![]() ![]() ![]() |
НУ ладно давай разбераться по пункта.
Я на 87% уверен что проблемма в первом аргументе либо в его типе либо в объявлении функции Эта уверенность инстинктивная + основное что мне приходилось править при переводе приложения на линь - это ссылки и указатели. В Твоем случае я вижу что мы имеем дело с FITS немного погуглив
обрати внимание на первую строчку кода и вызов ffmahd ИМХО такое объявление отличается от твоего на одну * контрол-ц контрол-в из MSDN и готовых сырцов часто приводит к непониманию сделай ТАК!
в объявлении функции и будет тебу счастие а примеров подобного рода куча http://astro.phys.au.dk/ai43/toar/io/MOMF/...itsio/putcoll.c Сообщение отредактировал ЙаМайскЫйПчОЛ - 22.4.2009, 8:21 |
|
|
NordWest |
![]()
Сообщение
#24
|
Студент ![]() Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
НУ ладно давай разбераться по пункта. ... сделай ТАК!
в объявлении функции и будет тебу счастие ... Ну вот, программа заработала. При этом не понятно что случилось и что собственно помогло... В общем, я попытался воспользоваться советом уважаемого майского насекомого. убрать звездочку из ffopen явно мало. Потому как сама fits_open_file связана define'ом с функцией ffopentest в файле longname.h:
Т.е. этот двойной указатель передается ей, а уже она вызывает ffopen(): Раскрывающийся текст
Получается чтобы поменять заголовок как в совете, нужно не только изменить сам ffopen, но и ffopentest и ещё все процедуры, которые вызывают данные функции с двойным указателем. Это мне и выдал make, когда я заменил вызов у себя и пересобирал библиотеку. Поэтому я возвернул всё назад. Пересобрал библиотеку и свой проект и о чудо!.. Помимо этих действий, я также скачал новую версию библиотеки, переустановил её в /usr/local а не /usr/local/bin как ранее и забросил в папку, откуда подключаю fitsio.h и longname.h ещё и drvsmem.h и fitsio2.h, которые также создаются при сборке и на которые я раньше внимания вообще не обращал. Т.е. возможно была какая-то путаница версий, либо я криво установил библиотеку... Либо ещё что. Главное теперь всё работает и более того - по сравнению с виндой приложение теперь летает ![]() В любом случае, всем спасибо за помощь и участие! И приношу свои извинения за нецелевое использование консультационных ресурсов форума. Сообщение отредактировал NordWest - 22.4.2009, 13:16 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 29.5.2025, 9:32 |