SIGFPE при присвоении single:=integer!

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

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

SIGFPE при присвоении single:=integer!

Сообщение Герасим » 12.01.2008 15:37:55

При портировании проекта Delphi в Lazarus
procedure TTimeMark.View(...);//один из методов объекта
Код: Выделить всё
var
  x:integer;
  s:single;
...
s:=x;//тут получаю SIGFPE!!!!!!

Сделал программу для проверки бага из трёх строк всё ОК!!!
Код: Выделить всё
var
  x:integer;
  s:single;
begin
  readln(x);
  s:=x; //всё ОК!!!
  writeln(s);
  readln;
end;

смотрел, дизассемблер (в т.ч. и делфи)
везде код одинаковый, кроме как передача параметров
в методе объекта (понятное дело, тут ebp ибо стэк)
fildl -12(%ebp)
fstps -28(%ebp)

в простой программке (прямая адресация)
fildl ..x
fstps ..s

потом перенёс в отдельную процедуру, получил так же код со стеком
fildl -4(%ebp)
fstps -8(%ebp)
но и там всё хорошо, т.е. ошибка происходит в методе объекта

вот, как лечить?

учимся правильно оформлять сообщения
Герасим
новенький
 
Сообщения: 14
Зарегистрирован: 28.12.2007 13:29:18

Сообщение Sergei I. Gorelkin » 12.01.2008 16:18:39

Есть ощущение, что трабл не в самом присваивании, а в коде, который выполняется где-то до него.

Если проблемное присваивание вынести в отдельную процедуру и вызывать ее из метода объекта - будет работать?
А если из проблемного метода объекта убрать (перенести в другой метод) все, кроме проблемного присваивания?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


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

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

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

Рейтинг@Mail.ru