Ошибка после указания библиотеки времени выполнения как многопоточной

Моя текущая программа, над которой я работал в Visual Studio 2010, работала некоторое время, пока не обнаружила, что мои друзья, пытавшиеся запустить ее, получили ошибку "msvcp100.dll отсутствует". Я попытался исправить это, статически связав библиотеки, изменив настройку библиотеки времени выполнения с "Многопоточная DLL" на "Многопоточная".

В результате программа вылетает и вызывает следующую ошибку / точку останова.

HEAP[Tanker.exe]: неверный адрес, указанный для RtlFreeHeap( 03090000, 02FF4418) Windows запустила точку останова в Tanker.exe.

Это может быть связано с повреждением кучи, что указывает на ошибку в Tanker.exe или любой из загруженных им библиотек DLL.

и стек вызовов:

    ntdll.dll!_RtlpBreakPointHeap@4()  + 0x23 bytes 
    ntdll.dll!_RtlpValidateHeapEntry@12()  + 0x30eb3 bytes  
    ntdll.dll!_RtlDebugFreeHeap@12()  + 0x9a bytes  
    ntdll.dll!@RtlpFreeHeap@16()  + 0x576fe bytes   
    ntdll.dll!_RtlFreeHeap@12()  + 0x54ed bytes 
    kernel32.dll!_HeapFree@12()  + 0x14 bytes   
>   Tanker.exe!free(void * pBlock)  Line 51 C
    Tanker.exe!std::_Tree<std::_Tset_traits<sf::ResourcePtr<sf::Image> *,std::less<sf::ResourcePtr<sf::Image> *>,std::allocator<sf::ResourcePtr<sf::Image> *>,0> >::clear()  Line 1415 + 0x23 bytes C++
    Tanker.exe!std::_Tree<std::_Tset_traits<sf::ResourcePtr<sf::Image> *,std::less<sf::ResourcePtr<sf::Image> *>,std::allocator<sf::ResourcePtr<sf::Image> *>,0> >::erase(std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<sf::ResourcePtr<sf::Image> *,std::less<sf::ResourcePtr<sf::Image> *>,std::allocator<sf::ResourcePtr<sf::Image> *>,0> > > _First, std::_Tree_const_iterator<std::_Tree_val<std::_Tset_traits<sf::ResourcePtr<sf::Image> *,std::less<sf::ResourcePtr<sf::Image> *>,std::allocator<sf::ResourcePtr<sf::Image> *>,0> > > _Last)  Line 1383 C++
    Tanker.exe!MainMenu::Show(sf::RenderWindow & window)  Line 36 + 0x4c bytes  C++
    Tanker.exe!Game::ShowMenu()  Line 170   C++
    Tanker.exe!Game::GameLoop()  Line 128   C++
    Tanker.exe!Game::Start()  Line 24   C++
    Tanker.exe!wmain(int argc, wchar_t * * argv)  Line 12   C++
    Tanker.exe!__tmainCRTStartup()  Line 278 + 0x12 bytes   C
    kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes    
    ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes   
    ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes    

Есть ли простой способ исправить это, или я гораздо лучше, просто динамически связывая msvcp100.dll? Если последнее, то каков наилучший способ сделать это?

0 ответов

Другие вопросы по тегам