Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Вылет проги по "Invalid floating point operation"   Найти похожие ветки 

 
ЮрийК ©   (2004-08-10 12:46) [0]

Следующий вопрос:
Программа, написанная на дельфи, иногда вылетает по исключению "Invalid floating point operation" у пользователя. Программа использует много ДЛЛ-ей (свои, написанные на VC, и чужие также, без кода), и исключение например может случаться и там. Что и где можно добавить в код, чтобы найти причину? Например какие-то данные скинуть в файл (какие?), которые помогут понять ситуацию?


 
inic ©   (2004-08-10 13:12) [1]

Быть может окружить все вызовы подозрительных функций try except, например:

procedure SomeProc ();
 try
   CallFunc();
 except
   on EInvalidOp do MessageBox(0, "From Unit1.SomeProc", "", 0);
 end;
end;


 
Ega23 ©   (2004-08-10 13:30) [2]

Скорее всего где-то FloatToStr не так переводишь.


 
TUser ©   (2004-08-10 13:38) [3]

Чаще (у меня, по крайней мере) - деление на ноль.


 
Ega23 ©   (2004-08-10 13:42) [4]

Чаще (у меня, по крайней мере) - деление на ноль.

Это не EDivByZero ли случайно?


 
TUser ©   (2004-08-10 13:54) [5]

Нет. InvalidFlPOp.


 
Ega23 ©   (2004-08-10 14:14) [6]

Нет. Только что проверил.

Floating point division by zero


 
Anatoly Podgoretsky ©   (2004-08-10 14:27) [7]

Это когда NAN или INF


 
ЮрийК ©   (2004-08-10 15:46) [8]

"Это когда NAN или INF"

Это на ассемблере?


 
Anatoly Podgoretsky ©   (2004-08-10 15:47) [9]

Нет это два предопределенных значения для чисел с плавающей запятой.


 
ЮрийК ©   (2004-08-10 16:26) [10]

Весь код с плавающими числами (в ДЛЛ) :

в одном месте:

     if (nNext > nCur) {
       float flNum = (float)nNum;
       pSour->d = flNum + flNum / (float)(nNext - nCur);
     }

в другом месте:

int cmpR( const void *sr1, const void *sr2 )
{
 float& a = ((SInfo*)sr1)->d;
 float& b = ((SInfo*)sr2)->d;
if ( a > b ) return -1;
if ( a < b ) return 1;

и в третьем:

 static BYTE str[256];
 if (nLen1 == 0 && nLen2 == 0)
    return 0;
 memset(str,0xff,256);
 double maxlen=__max(nLen1,nLen2);
 double procent=0.0;
 for (WORD i=0;i<nLen1;i++)
   str[pStr1[i]]=(BYTE)i;
 for (i=0;i<nLen2;i++){
   if (pStr1[i]==pStr2[i]) procent+=100;
   else
      if (str[pStr2[i]]<0xff) procent+=50;
 }
 return (int)(procent/=maxlen);

Вроде бы ничего такого особенного, чтобы из-за этого вылетало.


 
Плохиш ©   (2004-08-10 16:29) [11]


> ЮрийК ©   (10.08.04 16:26) [10]

А что, сайт уже в "CMAster" переименовали? или с других сайтов с такими вопросами сразу посылают?


 
ЮрийК ©   (2004-08-10 17:18) [12]

"А что, сайт уже в "CMAster" переименовали? или с других сайтов с такими вопросами сразу посылают?"

Основная прога на дельфи, смотри первое сообщение.


 
Ega23 ©   (2004-08-10 17:28) [13]

(nNext - nCur);    чему равно?

Я в сях, конечно, не силён, но что-то вот это мне не нравится:
str[pStr1[i]]=(BYTE)i
и вот это:
str[pStr2[i]]<0xff


 
ЮрийК ©   (2004-08-10 18:04) [14]

"(nNext - nCur);    чему равно?"
от 1 до 100000, если и больше, то вряд ли существенно.

"Я в сях, конечно, не силён, но что-то вот это мне не нравится:
str[pStr1[i]]=(BYTE)i"
i не больше длины строки pStr1, которая всё же меньше 256 (так изначально), pStr1[i] точно меньше 256.

"и вот это:
str[pStr2[i]]<0xff"
Где pStr2[i] такое (значение меньше 256), что str[pStr2[i]] равно 0xff, результат изменяться не должен (всего лишь).

В сгоседней ветке пишут про перполнение стека, что это может давать ошибку. Может быть в этом и есть проблема?


 
ЮрийК ©   (2004-08-10 21:28) [15]

Кстати, как можно узнать, что стека не хватило и произошло его переполнение.



Страницы: 1 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.034 c
8-1086612981
Serg_M
2004-06-07 16:56
2004.08.29
Эрозия и Наращивание


3-1091694958
RDen
2004-08-05 12:35
2004.08.29
Как добавить поле в FieldEditor?


14-1092194477
Aldor_
2004-08-11 07:21
2004.08.29
На какой минимальной конфигурации будет приемлемо рабать Win2K?


14-1092009303
Sergey Kaminski
2004-08-09 03:55
2004.08.29
Никаких домаших животных


14-1092147441
oldman
2004-08-10 18:17
2004.08.29
Админам