我创建了一个调用第三方代码的 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;
}
}
确切的错误是:试图读取或写入受保护的内存。这通常表明其他内存已损坏。
更新:
扫描第 3 方代码后,由于它的传递方式,它似乎是多维数组,但我仍然不确定是什么导致了问题:
源函数
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 不为空的值。但是,如果我尝试在此代码下快速观看 (*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);
这可能是问题吗?