непонятное исключение
От: angle Россия  
Дата: 12.01.03 12:47
Оценка:
Дебаг-версия программы, на С++, падает при возврате функцией значения.
В коде возврата ASM строка "fld DWORD ptr[lax+238h]" приводит к исключению 0xC0000092 "float stack check".
Падает в одном и том же месте.

— может ли причиной падения быть непривильная работа с памятью?
— что это за исключение такое?

PS: буду благодарен за любые ответы т.к. все свои идеи закончились )
С++ код падения:
double CMyClass::GetFactor()
{
return m_dblFactor; // падает здесь. тип прерменной m_dblFactor — double.
}
Re: непонятное исключение
От: Павел Кузнецов  
Дата: 13.01.03 11:33
Оценка: 2 (1)
Здравствуйте, angle, Вы писали:

A> — может ли причиной падения быть непривильная работа с памятью?


Вполне.

A>В коде возврата ASM строка "fld DWORD ptr[lax+238h]" приводит к исключению 0xC0000092 "float stack check".

A> — что это за исключение такое?

Похоже на то, что запорчен float стек.

A> С++ код падения:

A> double CMyClass::GetFactor()
A> {
A> return m_dblFactor; // падает здесь. тип прерменной m_dblFactor — double.
A> }

Скорее всего стек/память портится еще до этой функции. На всякий случай можешь еще проверить this в начале этой функции.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: непонятное исключение
От: adontz Грузия http://adontz.wordpress.com/
Дата: 13.01.03 21:27
Оценка: 3 (1)
Здравствуйте, angle, Вы писали:

В стеке вещественных чисел всего 8 позиций.
Функция возвращает значение типа float/double в элементе ST(0) стека
Если вылетел float stack check, то надо сказать что стек просто переполнился в связи с неправльной работой с этим стеком.
Память (оперативная) здесь ни при чём.
Править надо функции со встроенным ассемблером, которые возможно что-то портят. Это может быть и НЕ освобождение использовавшегося элемента стека, и некорректная работа с MMX + некорректное переключение между float и MMX арифметикой
A journey of a thousand miles must begin with a single step © Lau Tsu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.