static void InvShiftRows(BYTE* dest)
{
    tcout << "\t\t\tInvShiftRows()+" << EOL;
    BYTE* temp = new BYTE[16];
    ByteUtil::LogArray("temp1", temp, 16);
    memcpy(temp, dest, 16);
    ByteUtil::LogArray("temp2", temp, 16);
    dest[0x01] = temp[0x0D];
    dest[0x02] = temp[0x0A];
    dest[0x03] = temp[0x07];
    dest[0x05] = temp[0x01];
    dest[0x06] = temp[0x0E];
    dest[0x07] = temp[0x0B];
    dest[0x09] = temp[0x05];
    dest[0x0A] = temp[0x02];
    dest[0x0B] = temp[0x0F];
    dest[0x0D] = temp[0x09];
    dest[0x0E] = temp[0x06];
    dest[0x0F] = temp[0x03];
    ByteUtil::LogArray("Dest1", dest, 16);
    delete[] temp;
    tcout << "\t\t\tInvShiftRows()-" << EOL;
}
だから私はアクセス違反が時々起こることをたどりました、delete[] tempそして私の人生の間、私は理由を理解することができません。それはランダムにのみ行われます。理由について何か手がかりはありますか?
リクエストごとに編集 して、ByteUtil::LogArrayを確認します
void ByteUtil::LogArray(char* header, const BYTE* thearray, int length)
{
    tcout << header << "(" << length << ")-";
    char* number = new char[4];
    for(int i=0; i<length; i++)
    {
        sprintf_s(number, 4,"%02X:", thearray[i]);
        wcout << number;
    }
    delete[] number;
    wcout << EOL; //EOL is just std::endl << std::flush
}
正直なところ、delete[]でいくつか悪い動きをしたと思います。BYTE temp[4]コードレビューの投稿の1つで、新しいX[]を使用するときは常にdelete[]を使用する必要があることを学びました。そのため、置き換えてBYTE* temp = new BYTE[4]対応するdelete[]を追加するようなものをどこにでも配置し始めました。最初は、新しいX []を使用すると、その配列のすべての値がゼロに設定されるように見えました(暗号化/復号化メソッドを破棄していたため、偽物であることが判明しました)。削除したもののどれが削除しすぎているのかを把握してください...別の質問をしたくなります。
メソッドに含めるのは無責任BYTE temp[4] = {0x00};ですか?new X[]またはを使用する方が良い習慣delete[]ですか?