Хорошо, поэтому я решил создать приложение WinAPI, которое рисует модульное умножение на круге, и, если множитель находится в диапазоне от 0 до 0,1 (границы не включены), происходит сбой. При отладке всплывает окно с сообщением об ошибке «Отладочное утверждение не удалось!» и «Нажмите« Повторить »для отладки приложения».
(Так как у меня 1 точка повторения, я не могу публиковать изображения, но это окно сообщения об ошибке )
Когда я нажимаю «Повторить», он всегда прерывает выполнение в операторе if else
, не показывая никакой полезной информации. То, что оценивается в if else
, не имеет значения, но предполагается преобразовать число типа FLOAT
в CHAR *
, а затем преобразовать CHAR *
в WCHAR *
. Это часть кода, которая (по-видимому) не работает:
if (useFloat == FALSE)
_gcvt_s(buff, 7, (multiplier / 100.0f), 4); // multiplier is type size_t (ull)
else // This is where the breakpoint is set.
_gcvt_s(buff, 7, fMultiplier, 4); // fMultiplier is type FLOAT
mbstowcs_s(NULL, text, 7, buff, 7);
На этом этапе выполнение прерывается, но, поскольку это может быть что-то с самим рисунком, я включаю цикл, который рисует модульное умножение на круге (хотя мне это кажется подходящим):
if (useFloat == FALSE)
for (size_t i = 0; i < 360; i++)
{
pRenderTarget->DrawLine(
D2D1::Point2F(
ellipse.radiusX * cosf(i * (float)M_PI / 180.0f) + ellipse.point.x,
ellipse.radiusY * -sinf(i * (float)M_PI / 180.0f) + ellipse.point.y),
D2D1::Point2F(
ellipse.radiusX * cosf(i * (float)M_PI / 180.0f * (multiplier / 100.0f)) + ellipse.point.x,
ellipse.radiusY * -sinf(i * (float)M_PI / 180.0f * (multiplier / 100.0f)) + ellipse.point.y),
pBrushLine);
}
else
for (size_t i = 0; i < 360; i++)
{
pRenderTarget->DrawLine(
D2D1::Point2F(
ellipse.radiusX * cosf(i * (float)M_PI / 180.0f) + ellipse.point.x,
ellipse.radiusY * -sinf(i * (float)M_PI / 180.0f) + ellipse.point.y),
D2D1::Point2F(
ellipse.radiusX * cosf(i * (float)M_PI / 180.0f * fMultiplier) + ellipse.point.x,
ellipse.radiusY * -sinf(i * (float)M_PI / 180.0f * fMultiplier) + ellipse.point.y),
pBrushLine);
}
Так что да, я абсолютно не знаю, почему это происходит, я прочитал тонны потоков в MSDN, SO и Reddit, и у меня до сих пор нет ни единой подсказки, почему это может происходить.