Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вылет проги по "Invalid floating point operation" [D5]


ЮрийК ©   (2004-08-10 12:46:00) 

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


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

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


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

"(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, результат изменяться не должен (всего лишь).

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


Ega23   (2004-08-10 17:28:00) [3]

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

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


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

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

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


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


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

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


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

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

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

     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


Anatoly Podgoretsky   (2004-08-10 15:47:00) [7]

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


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

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

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


Anatoly Podgoretsky   (2004-08-10 14:27:00) [9]

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


Ega23   (2004-08-10 14:14:00) [10]

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

Floating point division by zero


TUser   (2004-08-10 13:54:00) [11]

Нет. InvalidFlPOp.


Ega23   (2004-08-10 13:42:00) [12]

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

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


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

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


Ega23   (2004-08-10 13:30:00) [14]

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


inic   (2004-08-10 13:12:00) [15]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо