0

わかりました、これはわかりません。デバッガーは、この特定の例外に関する多くの情報を提供していません。

呼び出される関数は次のとおりです。

NC_LIBEXPORT(VOID) ncKeyExpand(unsigned char* key, int initlen)
{
    int abspos = initlen;
    int curkpos = 0;
    do
    {
        key[abspos] = key[curkpos];
        ++abspos;
        ++curkpos;
        if(curkpos >= initlen)
            curkpos = 0;

    } while (curkpos < NC_KEY_MAX_LENGTH);
}

そして、アクセス違反はここの2行目で発生します。

unsigned char apkey[NC_KEY_MAX_LENGTH];
ncKeyExpand(&apkey[0], NC_PRIV_KEY_LENGTH);

なぜこれが起こっているのかについての洞察はありますか?私がすることはそれを修正することではありません。

Test Application.exeの0x776e7094で未処理の例外:0xC0000005:

それが正確なエラーです。

アクセス違反。

ポインタがアクセスできないアドレスを指している場合、たとえば、解放されているか、スコープ外であるか、nullである場合など、アクセス違反はありませんか?もしそうなら、なぜそれはここで育てられているのですか?char配列はすぐそこにあります。

4

1 に答える 1

1

配列は長さで宣言されています。つまり、 thr'NC_KEY_MAX_LENGTHから配列の場所にアクセスできます。apkey[0]apkey[NC_KEY_MAX_LENGTH-1]

あなたがあなたの機能を見れば

do
{
    key[abspos] = key[curkpos];
    ++abspos;

アレイサイズを超えてアクセスしています。

于 2012-05-20T01:11:32.477 に答える