Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

Вылет проги по "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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.212 c
14-1092013180
Sergey Kaminski
2004-08-09 04:59
2004.08.29
Дурацкие законы


1-1092337708
Rudy
2004-08-12 23:08
2004.08.29
защита информации.


1-1092297320
AlexFe
2004-08-12 11:55
2004.08.29
Изменение размера ComboBox


4-1089876981
webpauk
2004-07-15 11:36
2004.08.29
AppendMenu, ShortCat


1-1092389979
Чайник
2004-08-13 13:39
2004.08.29
StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский