2010-08-31 2 views
0

Хорошо, так долго выходные у меня в Macbook. Я начал делать загрузчик активов для 2D игровых платформ, его отлично работает в xcode, но когда я вернулся домой и попробовал и загрузил его в Windows, я получил ошибку отладки.dbgrptt.c dbghook.c Ошибка Iterator?

По существу, что происходит с первым вызовом итератора? второй - нет, но только при второй попытке вызова второго он вызовет ошибку (это в игровом цикле). Я поменял местами звонки, но тот же результат.

Программа (в отладке) завершает работу и дает мне сообщение

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.

Press 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

ответ

0

Похоже, что вы не проверить результат find вызова на линии 239 в функции drawGraphic.

Также я думаю, что loadAll цикл выглядит изворотливым. Вы перебираете m_assetsToLoad и изменяете его одновременно с номером loadResource.

+0

ах спасибо, стирание петли в конце работал. – 2010-08-31 11:34:52