我創建了一個調用第三方代碼的C++/CLI包裝器,它發生在損壞的內存中。所以我懷疑也許代碼爲不是在C++法律在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 [i] =(* source & masque)下快速觀看(* source & masque)>>(3-i);
我得到這個錯誤
(*源&面膜)錯誤: S1 ... Sn的最初定義的:&不能 '*源' 和 '假面舞會'
更新3進行該文件的全球範圍內,但我得到一個錯誤,當我把它原樣,所以我這樣初始化它們的構造:
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);
會這樣的問題呢?
聽起來像'dest'所指向的內存無效/不夠大。 –
source = nullptr也會導致崩潰 –
什麼是「S1」,「S2」等的聲明/定義? – legends2k