crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Непонятный "вылет" программы., а должна была быть кросплатформенной...
NordWest
  опции профиля:
сообщение 21.4.2009, 19:05
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Пишем программу в 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)


Это как же понимать? Области переменных смешались?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
3 страниц V   1 2 3 >  
Начать новую тему
Ответов (1 - 9)
SABROG
  опции профиля:
сообщение 21.4.2009, 20:35
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(NordWest @ 21.4.2009, 20:05) *
Начинали под винду, теперь есть непреодолимое желание использовать её ещё и под Линуксом,


А под виндой какой компилятор используется?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Пчол_*
сообщение 21.4.2009, 21:23
Сообщение #3





Гости








    


ты лучше код покажи а не результат: тк это обычная ошибка сегментации и причин возникновения куча
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Он_Же_*
сообщение 21.4.2009, 21:25
Сообщение #4





Гости








    


скорее всего неправльная работа с память: виндовый стиль программирования слишком расслабляет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Яже_*
сообщение 21.4.2009, 21:43
Сообщение #5





Гости








    


самая распространненая ошибка при работе с указателями и ссылками, хорошенько проверьте работу динамических элементов, особенно контейнеров и повышенное внимание параметрам функции
MVS + их компилер разрешает такие вещи от которых gcc жутко тянет блевать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 21.4.2009, 22:26
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(SABROG @ 21.4.2009, 21:35) *
Цитата(NordWest @ 21.4.2009, 20:05) *
Начинали под винду, теперь есть непреодолимое желание использовать её ещё и под Линуксом,


А под виндой какой компилятор используется?


mingw32-make

Цитата
ты лучше код покажи а не результат: тк это обычная ошибка сегментации и причин возникновения куча


fitsdata::fitsdata(QString fitsFileName)
{
...
       char *fname = fitsFileName.toAscii().data();
    fitsfile *fptr;//pointer ot FITSfile
    int status = 0;//status
    fits_open_file(&fptr, fname , READONLY,&status);
...
}


Объявление функции такое:
int ffopen(fitsfile **fptr, const char *filename, int iomode, int *status);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 21.4.2009, 22:34
Сообщение #7


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Вот твоя ошибка. Так делать категорически нельзя. fname у тебя невалиден.
Цитата(NordWest @ 21.4.2009, 23:26) *
char *fname = fitsFileName.toAscii().data();


подробно здесь

Сообщение отредактировал igor_bogomolov - 21.4.2009, 22:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 21.4.2009, 22:59
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


По сути тут область видимости временного объекта ограниченна таким образом:
Цитата
char *fname = (fitsFileName.toAscii().data());
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 21.4.2009, 23:30
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 21.4.2009, 23:34) *
Вот твоя ошибка. Так делать категорически нельзя. fname у тебя невалиден.
Цитата(NordWest @ 21.4.2009, 23:26) *
char *fname = fitsFileName.toAscii().data();


подробно здесь


Делал так:
QByteArray tmp = fitsFileName.toAscii();
const char *fname = tmp.data();


И так:
const char *fname = fitsFileName.toAscii().constData();


И так:
QByteArray tmp = fitsFileName.toAscii();
fits_open_file(&fptr, tmp.data() , READONLY,&status);


Но никак...
Так как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 21.4.2009, 23:35
Сообщение #10





Гости








    


а может дело в первом параметре функции ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 2:36