2

私のコード:

void RandomBuffer(ByteVector& out, size_t size)
{
    try 
    {
        out.resize(size);
        memcpy(&out[0], (void*)memcpy, size);
    }
    catch (...)
    {
        return;
    }   
}

ある種のランダム バッファを生成したい (高速な方法で、ランダム バッファのように)。そこで、提供されたコードを使用しました。小さなバッファの場合は問題なく動作しますが、大きなバッファ バイトがいくつか334692352あり、そのために失敗しました。

その後、使用しようとしましtrycatchが、とにかく例外が発生しました。Access violation reading location

なぜこの例外がcatch.

4

2 に答える 2

1

これは例外ではなく、OS または CPU の保護モードによってキャッチされたメモリ アクセス フォールトです。

ByteVector のメモリに直接アクセスできますか? このリンクを確認してください:

C++ CLI でのマネージド配列へのネイティブ配列の memcpy

于 2013-11-07T08:21:48.463 に答える
1

コンパイラと OS によっては、アクセス違反が例外として発生し、OS または CPU によってキャッチされる場合があります。OSがそれをキャッチしてプロセスを強制終了している場合、できることはあまりありません(ただし、境界とmemcpyをチェックしてアクセス違反を防ぎます)

于 2013-11-07T08:22:53.393 に答える