我的代码:
void RandomBuffer(ByteVector& out, size_t size)
{
try
{
out.resize(size);
memcpy(&out[0], (void*)memcpy, size);
}
catch (...)
{
return;
}
}
我想生成某种随机缓冲区(以快速方式和随机缓冲区一样)。所以我使用了提供的代码。对于小缓冲区,它工作正常,但我有一些大的缓冲区334692352
字节,但它失败了。
之后我尝试使用try
- catch
,但无论如何我得到了一个异常,那就是Access violation reading location
我想问一下,为什么catch
没有抓住这个例外。
答案 0 :(得分:1)
这不是一个例外,它是由操作系统或CPU中的保护模式捕获的内存访问故障。
您确定可以直接访问ByteVector的内存吗?检查此链接:
答案 1 :(得分:1)
根据编译器和操作系统的不同,访问冲突可以作为异常引发,由操作系统或CPU捕获。如果操作系统正在捕获它并终止进程,那么您可以做的事情并不多(但通过检查边界和memcpy来防止访问冲突)