はじめに:古いコードをすばやくハックして修正し、__try MSVC 拡張機能を使用して、一部の ptr が正当なメモリを指しているかどうか、または *ptr がメモリ違反を引き起こすかどうかを確認しようとしています (そうであれば、この ptr の処理を中止します)。だから私は次のようなものを書きました:
bool checkIsPtrPointingToValidAddress(const void *ptr)
{
__try
{
auto cpy = *((int*)ptr); // force mem access...
if ( (cpy ==42) && ((rand()+rand()+rand()+rand()+ rand()) == 1))
{
FILE* pFile = fopen ("tempdata.dat","w"); //... by unlikely but possible action
fputs (" ",pFile);
fclose (pFile);
}
return true;
}
__except(1)
{
return false;
}
}
メモリへのアクセスを強制する私の解決策は奇妙で醜いように見えますが、おまけとして、それが正しいかどうかはわかりません。また、プロジェクト全体で最適化を無効にすることはできないため、それはオプションではありません。また、MSDN のプラグマ オプティマイズに関するドキュメントはひどいものです。別名、"" が関数のすべての最適化を無効にするかどうかは明確ではありません。