私はバイナリ行列に取り組んでいます。2つのアレイがオーバーラップしています。(アドレスを確認しました)これは、いくつかのサイズの行列でのみ発生します。したがって、間違った結果が得られます。newを使用して配列を割り当てようとしましたが、そうするとセグメンテーション違反が発生します。メモリの重複を回避する方法はありますか?私は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
、重複しています。印刷してメモリアドレスを確認しました。これらは、2番目のレベルのforループの6回目の反復でオーバーラップします(n = 9、m = 3、size = 9、cnm = 3)。私はその間に使用していませんC
、私はそれを外側のループでのみ使用します。