私が Visual Studio 2010 で作業している現在のプログラムは、それを実行しようとした友人が "msvcp100.dll is missing" エラーを受け取ったことを発見するまで、しばらくの間動作していました。ランタイム ライブラリの設定を「マルチスレッド 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 を動的にリンクするだけのほうがよいのでしょうか? 後者の場合、これを行うための最良の方法は何ですか?