私はバイナリ行列を扱っています。 2つの配列が重なっています。 (私はアドレスを調べました)。これは行列のサイズが小さい場合にのみ起こります。したがって、私は間違った結果を得る。私は配列を割り当てるためにnewを使用しようとしましたが、私はセグメント化の失敗を取得します。私はメモリの重複を避ける方法はありますか?私はg ++コンパイラを使用しています。2つの配列のメモリアドレスの重複
これは私が、私はそれらのすべてを初期化する次のステップでは配列に
bool A[size0][size0],B[size0][size0],C[size0][size0];
を宣言した方法です。 AとBはオペランドで、Cは結果を保持します。
私は次の段階でカスタム乗法アルゴリズムを使用しています。ここに私の観察Tab
とC
を1として
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
スニペットが重なっているのです。私はそれらを印刷してメモリアドレスを調べました。ループの第2レベル(n = 9、m = 3、サイズ= 9、cnm = 3)の6番目の反復でオーバーラップします。その間にC
を使用していないので、私は外側のループでのみ使用します。
私たちにいくつかのコードを見せてください。メモリのオーバーラップは発生しません。 –
@LuchianGrigoreスニペットを追加しました。 – nouveau