C++ Memcpy矩阵到另一个矩阵

C++ Memcpy矩阵到另一个矩阵,c++,matrix,memcpy,C++,Matrix,Memcpy,我想复制两个矩阵。通过2 for循环行和列逐元素复制,经过几次数学运算和复制后,最终结果是正确的,而使用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](

我想复制两个矩阵。通过2 for循环行和列逐元素复制,经过几次数学运算和复制后,最终结果是正确的,而使用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));
这是正确的结果: 这是输出:

您的L和L_原始是2D矩阵,由指向单独分配的1D向量的指针数组组成。这些内存地址可能不在连续内存空间中。所以不能使用单个memcpy复制所有子向量

必须使用for循环在每个L[i]和L_original[i]之间应用memcpy

此外,sizeof运算符使用不正确。您需要复制的是1D子向量数据的字节长度,而不是指针的长度。你需要像这样的东西

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

SsieFoLLFr原原体是SsieZoFuff**,因此独立于NuWoW,考虑实现一个实际的矩阵类,例如,而不是用双指针来引诱命运。抬头:你不是在写C++,你是在C++中编写C.,我们只需写AutoLyOrg=矢量{{ 0,1 },{ 2,3 }};自动L=L_原件;只需一步即可实现深度复制。实现2d阵列,它就是memcpyL、L_original、sizeofdouble*nU*nF;。