Матрица Memcpy в другую матрицу - PullRequest
0 голосов
/ 14 апреля 2020

Я хотел бы скопировать 2 матрицы. При копировании элемента за элементом через 2 для циклов (строки и столбца) после нескольких математических операций и копий конечный результат будет правильным, а при использовании «memcpy» конечный результат будет неправильным в десятичных разрядах. Код выглядит следующим образом.

double **L_original;
double **L;
int nF,nU;



 L = new double*[nU]();
 L_original = new double*[nU]();
  for(int i=0; i<nU; i++){
      L_original[i] = new double[nF]();
      L[i] = new double[nF]();
  }

// copy element to element
/*for(int i=0; i<nU; i++)
        for(int j=0; j<nF; j++)
            L[i][j] = L_original[i][j];*/

memcpy(L, L_original, sizeof(L_original));

Это правильный результат: Matrix Correct Это вывод: вывод при использовании memcpy

1 Ответ

2 голосов
/ 14 апреля 2020

your L и L_original являются двумерными матрицами, состоящими из массива указателей на отдельно выделенные одномерные векторы. Эти адреса памяти могут не находиться в непрерывном пространстве памяти. Так что вы не можете использовать один memcpy для копирования всех подвекторов.

вам придется использовать для l oop, чтобы применить memcpy между каждым L [i] и L_original [i].

также ваш оператор sizeof() используется неправильно. Вам нужно скопировать длину байта данных (1-мерного подвектора), а не длину указателя. Вам нужно что-то вроде

  for(int i=0; i<nU; i++)
     memcpy(L[i],L_original[i], sizeof(double)*nF);
...