У меня две динамически распределенные матрицы. Я хочу скопировать все данные из первой матрицы и центрировать ее по границе со второй. Вот мой код, который, по-видимому, не работает правильно, так что я был бы благодарен за некоторую помощь:Скопируйте данные из одной матрицы в другую в C
Первая матрица:
unsigned char ** sudo=(unsigned char **) malloc (width*sizeof (unsigned char*));
if (sudo != NULL){
for (k=0; k<width ;k++){
sudo[k] =(unsigned char*) calloc (height,sizeof (unsigned char));
}
}
второй:
unsigned char ** fmatr=(unsigned char **) malloc ((width+border)*sizeof (unsigned char*));
if (fmatr != NULL){
for (k=0; k<(width+border) ;k++){
fmatr[k] =(unsigned char*) calloc ((height+border),sizeof (unsigned char));
}
}
Как центрировать первую матрицу в середине второго:
for(i=0,k=0;i<(width+border);i++,k++){
for(j=0,l=0;j<(height+border);j++,l++){
if((i>(2*border)) && (j>(2*border))){
fmatr[i][j]=sudo[k][l];
}
}
}
Любые идеи?
Если вы хотите централизовать данные, почему вы используете (i> 2 * border), а не (i> = border) и (i <высота + граница)? – CIsForCookies
Стандартное предупреждение: не выдавайте результат 'malloc' в C! C не является C++. И обратите внимание, что это не матрица, которая будет представлять собой 2D-массив. У вас есть массив указателей на (массивы) 'unsigned char'. Копирование matrx будет просто одним «memcpy (dest, src, width * height)». Поскольку вы используете элементы 'char', размер каждого элемента гарантируется« 1 »стандартом (вы также можете использовать это в своем коде). – Olaf
Пожалуйста, не удаляйте код или релевантную информацию из вашего вопроса. Этот сайт служит архивом знаний о программировании, и очистка содержимого вопроса удаляет информацию, которая может понадобиться кому-то другому. – dbush