サード パーティのコードを呼び出す C++/CLI ラッパーを作成しましたが、たまたまメモリが破損していました。だから私はおそらくコードがC++で合法ではなかったのではないかと疑っています
以下はクラッシュしたコードです。
void Init_4bit_tab(unsigned char *dest,unsigned char *source)
        {
            unsigned char masque,i;
            masque=0x08;
            for(i=0; i<4; i++) {
                dest[i] = (*source & masque)>>(3-i);
                masque >>= 1;
            }
        }
正確なエラーは次のとおりです。保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
アップデート:
サードパーティのコードをスキャンした後、渡された方法のために多次元配列のように見えますが、問題の原因はまだわかりません:
ソース関数
unsigned char Data_B[81];
...
S_Box_Calc(&Data_B[33]);
void S_Box_Calc(unsigned char *vect)
        {
              unsigned char *S_Box[8];
              unsigned lig,col,i;
              S_Box[0]=S1;
              S_Box[1]=S2;
              S_Box[2]=S3;
              S_Box[3]=S4;
              S_Box[4]=S5;
              S_Box[5]=S6;
              S_Box[6]=S7;
              S_Box[7]=S8;
              for(i=0;i<8;i++) {
                    col= 8*vect[1+6*i] + 4*vect[2+6*i] + 2*vect[3+6*i] + vect[4+6*i];
                    lig= 2*vect[6*i] + vect[5+6*i];
                    Init_4bit_tab(&vect[4*i],&S_Box[i][col+lig*16]);
              }
        }
更新 2: デバッグ モードで値を確認したところ、dest と source が null ではありません。ただし、このコードの下で (*source & masque) をすばやく見ようとすると、 dest[i] = (*source & masque)>>(3-i);
このエラーが発生します
(*source & masque) エラー: & は '*source' および 'masque' では実行できません
更新 3: S1...Sn はもともとファイルのグローバル スコープで定義されていましたが、そのままにしておくとエラーが発生するため、コンストラクターで次のように初期化しました。
unsigned char lS1[64] = { 
                14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
                0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
                4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
                15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13
            };
            std::copy(S1, S1 + 64, lS1);
これは問題でしょうか?