【问题标题】:Exception not caught. Access violation reading location未捕获异常。访问冲突读取位置
【发布时间】:2023-03-19 09:12:01
【问题描述】:

我的代码:

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没有捕捉到这个异常。

【问题讨论】:

    标签: c++ exception try-catch


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这不是异常,是操作系统捕获的内存访问错误或CPU中的保护模式。

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

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

      【讨论】:

        猜你喜欢
        • 2015-08-28
        • 1970-01-01
        • 1970-01-01
        • 2015-05-01
        • 2013-11-22
        • 1970-01-01
        • 2011-09-28
        • 2023-03-15
        • 1970-01-01
        相关资源
        最近更新 更多