타사 코드를 호출하는 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;
}
}
정확한 오류가 있었다 : 보호 된 메모리를 읽거나 쓰려고 시도 그래서 아마 코드가 C에서 불법이라고 의심하고있어 ++
아래 추락 코드입니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다.
업데이트 : 제 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 : 가 나는 이명 령과 소스가 null없는 디버그 모드에서 값을 확인. 그러나이 코드 아래에서 빠른 시계 (* 소스 & 가면극)를 시도한 경우 dest [i] = (* 소스 & 가면극) >> (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