没有抓到例外。访问违规阅读位置

时间:2013-11-07 08:19:58

标签: c++ exception try-catch

我的代码:

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没有抓住这个例外。

2 个答案:

答案 0 :(得分:1)

这不是一个例外,它是由操作系统或CPU中的保护模式捕获的内存访问故障。

您确定可以直接访问ByteVector的内存吗?检查此链接:

Memcpy of native array to managed array in C++ CLI

答案 1 :(得分:1)

根据编译器和操作系统的不同,访问冲突可以作为异常引发,由操作系统或CPU捕获。如果操作系统正在捕获它并终止进程,那么您可以做的事情并不多(但通过检查边界和memcpy来防止访问冲突)