Дебаг-версия программы, на С++, падает при возврате функцией значения.
В коде возврата ASM строка "fld DWORD ptr[lax+238h]" приводит к исключению 0xC0000092 "float stack check".
Падает в одном и том же месте.
— может ли причиной падения быть непривильная работа с памятью?
— что это за исключение такое?
PS: буду благодарен за любые ответы т.к. все свои идеи закончились )
С++ код падения:
double CMyClass::GetFactor()
{
return m_dblFactor; // падает здесь. тип прерменной m_dblFactor — double.
}
Здравствуйте, 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 в начале этой функции.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
В стеке вещественных чисел всего 8 позиций.
Функция возвращает значение типа float/double в элементе ST(0) стека
Если вылетел float stack check, то надо сказать что стек просто переполнился в связи с неправльной работой с этим стеком.
Память (оперативная) здесь ни при чём.
Править надо функции со встроенным ассемблером, которые возможно что-то портят. Это может быть и НЕ освобождение использовавшегося элемента стека, и некорректная работа с MMX + некорректное переключение между float и MMX арифметикой