Главная страница
    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.031 c
14-1092076541
Piter
2004-08-09 22:35
2004.08.29
Помогите с выбором насчет компьютера


1-1092663189
Hermes
2004-08-16 17:33
2004.08.29
Как убрать символы #13#10


1-1092231625
andrey__
2004-08-11 17:40
2004.08.29
Организация очереди


4-1090015555
Virtual GOD
2004-07-17 02:05
2004.08.29
Работа с консольным приложеним


1-1092318620
ilya@scsc.ru
2004-08-12 17:50
2004.08.29
Eсть ли компоненты для генерации баркодов в различных кодировках?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский