Хорошо, так долго, проведя выходные с Macbook, я начал делать загрузчик ресурсов для двухмерных игровых платформ, он отлично работает в xcode, но когда я вернулся домой и попытался загрузить его в Windows, я получил ошибку отладки.
По сути, происходит то, что первый вызов итератора работает? вторая - нет, но только со второй попытки вызова второй вызовет ошибку (это в игровом цикле). Я поменял местами звонки, но получился тот же результат.
Программа (в отладке) выходит и выдает мне сообщение
AssetLoadingWin.exe вызвал
контрольная точка
затем указывает на следующий код в dbgrptt.c
#undef _CrtDbgBreak
/* These methods don't need a separate
wchar version. Hence they need to be compiled only once from
the original file */
_CRTIMP void _cdecl _CrtDbgBreak(
void
)
{
DebugBreak(); // <-- breakpoint here
}
если я продолжу, я получу следующее сообщение
Microsoft Visual Studio C Runtime
Библиотека обнаружила фатальную ошибку в
AssetLoadingWin.exe.
Нажмите Break, чтобы отладить программу или
Продолжайте завершать программу.
, который в свою очередь указывает на код в dbghook.c
__declspec(noinline)
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
/* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
(_Reserved);
_debugger_hook_dummy = 0;
}
После множества точек останова его сузили до итератора, вызывающего метод.
// line 347 in the pastie.
void libImageDraw(GraphicIt &gfxIt, GraphicOptions &opts) {
gfxIt->second->draw(opts.x, opts.y, opts.z); line
}
Спасибо за любые указатели.
Полный исходный код
window.cpp
asset_manager.hpp