Я работаю над двоичными матрицами.Два из моих массивов перекрываются.(Я проверил адреса). Это происходит только для нескольких размеров матриц.Следовательно, я получаю неправильные результаты.Я пытался использовать 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
перекрываются.Я проверил адреса памяти, напечатав их.Они перекрываются на шестой итерации второго уровня для цикла (n = 9, m = 3, размер = 9, cnm = 3).Я НЕ использовал C
между ними, я использую его только во внешнем цикле.