简介:我试图快速修复旧代码并使用 __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 上的编译指示优化文档很糟糕,也就是说,不清楚“”是否禁用了该函数的所有优化。