나는 이진 행렬을 연구 중이다. 내 배열 중 두 개가 겹쳐져 있습니다. (나는 주소를 확인했다.) 이것은 단지 몇 가지 크기의 행렬에 대해서만 발생한다. 그러므로 나는 잘못된 결과를 얻는다. 내가 배열을 할당하는 새로운 사용했지만, 내가 할 때 세분화 오류가 발생합니다. 메모리 겹침을 피할 수있는 방법이 있습니까? g ++ 컴파일러를 사용하고 있습니다. 두 배열의 메모리 주소 중복
이
내가 그들 모두를 초기화 다음 단계에서 배열을bool A[size0][size0],B[size0][size0],C[size0][size0];
을 선언하는 방법입니다. A와 B는 피연산자이고 C는 결과를 보유합니다.
다음 단계에서 맞춤 곱셈 알고리즘을 사용하고 있습니다. 여기에 중복되는 조각
for(I=0;I<cnm;I++){
bool Tab[m][size];
bool Ctemp[size][size];
int count=0;
for(uint i=0;i<pow(2.0,m*1.0);i++){
for(uint j=0;j<n;j++){
Tab[i][j]=0; //Initialize
if(i==0){
Tab[i][j] = 0;
}
else{
int dec;
//h is calculated here
dec=gray_map[i-1]^gray_map[i]; //gray_map returns gray code
Tab[i][j] = Tab[i-1][j]^B[h][j];
}
....
....
}
}
.....
.....
//Rest of the code
내 관찰
Tab
당으로
및 C
입니다. 인쇄하여 메모리 주소를 확인했습니다. 루프에 대한 두 번째 레벨의 여섯 번째 반복에서 중복됩니다 (n = 9, m = 3, 크기 = 9, cnm = 3). 그 사이에 C
을 사용하지 않았습니다. 외부 루프에서만 사용합니다.
몇 가지 코드를 보여주십시오. 메모리 겹침이 발생해서는 안됩니다. –
@LuchianGrigore 스 니펫을 추가했습니다. – nouveau