2

我的代码:

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.

4

2 回答 2

1

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

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

C++ CLI中本机数组到托管数组的Memcpy

于 2013-11-07T08:21:48.463 回答
1

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

于 2013-11-07T08:22:53.393 回答