サード パーティのコードを呼び出す 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);
これは問題でしょうか?